|
|
||||
Tips > |
|||||
ウィンドウハンドル取得(WindowFromPoint) |
更新 : 2010/04/13 |
||||
|
|
||
解説: アプリケーションを作っていると、他のアプリのハンドルを取得したときがあります。 以前 Win32API の FindWindowEx 関数を使って、起動しているメモ帳のハンドルを取得しました。 アプリケーションの情報が掴めていれば、このやり方でハンドルは取得できます。しかし、何もわからない時はどうすればよいでしょう? 今回は、マウス下にあるウィンドウハンドルを取得する方法を考えてみます。 ウィンドウハンドルが取得できたかどうか、確認のためにメモ帳を起動してハンドルを比較しています。 使用例: "Project1.exe" をダブルクリック後、メモ帳を起動してキャプションにマウスを乗せると Label1 の Captionに "memo" と表示されます。 準備として、Label、Timer をひとつずつ適当に配置してください。 アプリケーションを起動して、マウスをメモ帳のキャプションに移動してみてください。 Label1 の Caption に "memo" と表示されるはずです。 OnTimer イベントハンドラでは、メモ帳のキャプションバーから WindowFromPoint 関数を使って、ウィンドウハンドルを取得しています。 FindWindowEx 関数からもメモ帳のハンドルを得、このふたつを比較して、マウス下のウィンドウハンドルが取得できたどうか確認しています。 //------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { POINT pos; HWND hWnd; GetCursorPos(&pos); // 関数が成功するとウィンドウのハンドルが返る hWnd = WindowFromPoint(pos); // メモ帳を探す HWND checkWnd = FindWindowEx(0, 0, "Notepad", 0); if (hWnd == checkWnd) Label1->Caption = "memo"; else Label1->Caption = ""; } //------------------------------------------------------------------- |