掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
自分を非アクティブにしたい (ID:38772)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>IE系のプログラムを見つけるのがうまくいかなくて。 EnumWindows APIとEnumChildWindows APIを使うのが良いのではと思います。 多分「Internet Explorer_Server」というクラス名の子ウィンドウがあるのがIE系のブラウザだと思うので、まずEnumWindows APIでトップレベルのウィンドウを取得してからEnumChildWindows APIでInternet Explorer_Serverというクラス名の子ウィンドウがあるか探し、なければ次のトップレベルウィンドウの子ウィンドウを探索していく...というような流れで。 function ClassNameGet(hHandle: HWND): String; //ウィンドウハンドルhHandleのクラス名を返す const lci_LEN = 256; var lp_Buff: PChar; begin Result := ''; lp_Buff := AllocMem(lci_LEN +1); try GetClassName(hHandle, lp_Buff, lci_LEN -1); Result := String(lp_Buff); finally FreeMem(lp_Buff); end; end; var G_hIEWindow: HWND; function EnumChildWindowProc(hHandle: HWND; iParam: LPARAM): Bool; stdcall; //子ウィンドウを列挙して調べる begin if (ClassNameGet(hHandle) = 'Internet Explorer_Server') then begin //IE系の子ウィンドウがあった G_hIEWindow := hHandle; Result := False; end else begin Result := True; end; end; function EnumWindowProc(hHandle: HWND; iParam: LPARAM):BOOL; stdcall; //トップレベルウィンドウを列挙 begin if (IsWindowVisible(hHandle)) then begin EnumChildWindows(hHandle, @EnumChildWindowProc, 0); Result := (G_hIEWindow = 0); end else begin Result := True; end; end; procedure TForm1.Button1Click(Sender: TObject); //探すIE系プログラムが最小化されていると失敗することに注意 begin //第2引数を利用して処理しようとするとややこしいのでグローバル変数を利用 G_hIEWindow := 0; EnumWindows(@EnumWindowProc, 0); if (G_hIEWindow = 0) then begin ShowMessage('失敗'); end else begin SetForegroundWindow(G_hIEWindow); end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.