2017/3/28 (火) 21:48:42 Mr.XRAY |
> サンプルのコードは,新規にブラウザを起動することを前提にしています.
起動中のブラウザに対応したコードを追加しました.
ただし,IE11 は起動中のウィンドウに対して操作しても TOPMOST になりません.
[plBrowseURL_TOPMOST.zip] 1,160 KB
http://mrxray.on.coocan.jp/Delphi/zip/plBrowseURL_TOPMOST.zip
起動中のブラウザのハンドルの取得は,以下のコードを使用しています.
//-----------------------------------------------------------------------------
// 指定プロセスの起動をチェック
// 戻り値はそのプロセスのウィンドウのハンドル値
// Toolhelp32Snapshotを使用する方法
//
// CreateToolhelp32Snapshotの使用には,usesにTlhelp32が必要
//-----------------------------------------------------------------------------
function TForm1.CheckRunExe(RunExeName: string): THandle;
const
MAX_PROCCOUNT = 2048;
PROCESS_QUERY_LIMITED_INFORMATION = $1000;
PROCESS_NAME_NATIVE = 1;
var
LListHandle : THandle;
LProcEntry : TProcessEntry32;
LProcessID : DWORD;
LTargetWnd : THandle;
LExePath : String;
begin
Result := 0;
//デバッグの特権を有効にする
Privilege.SetPrivilege(SE_DEBUG_NAME, True);
//プロセスのスナップショットのハンドルを取得
LListHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if LListHandle > 0 then begin
try
//最初のプロセスに関する情報をTProcessEntry32レコード型に取得
LProcEntry.dwSize := SizeOf(TProcessEntry32);
Process32First(LListHandle, LProcEntry);
repeat
//パス名とプロセスIDを取得
LExePath := LProcEntry.szExeFile;
if LowerCase(LExePath) = LowerCase(RunExeName) then begin
LProcessID := LProcEntry.th32ProcessID;
LTargetWnd := LProcessID;
EnumWindows(@EnumTopWindow, LPARAM(@LTargetWnd));
if LTargetWnd <> LProcessID then begin
Result := LTargetWnd;
Break;
end;
end;
//次のプロセスに関する情報をTProcessEntry32レコード型に取得
until Process32Next(LListHandle, LProcEntry) = False;
finally
CloseHandle(LListHandle);
end;
end;
end;
|
|