マウスカーソルの位置を利用してウィンドウハンドルを取得してみる。
GetCursorPos マウスカーソルの位置を取得
WindowFromPoint 指定座標にあるウィンドウハンドルを取得
←こんな感じでフォームを作ってみた
TEdit名 HandleEdit, TitleEdit
TButton名 WindowFromPointBtnとしました。
WindowFromPointBtnを押すとマウスカーソル位置の
ウィンドウハンドルとタイトルが表示されます。
試しにメモ帳を起動して、マウスカーソルをメモ帳の
タイトルバー上に持って行き、
EnterキーでWindowFromPointBtnを押してやります。
すると、メモ帳のハンドルとタイトルが表示されるのです。
<Unit1.cpp>
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WindowFromPointBtnClick(TObject *Sender)
{
POINT pt;
// マウスカーソルの位置をスクリーン座標で取得
GetCursorPos(&pt);
// カーソル位置からウィンドウハンドル取得
HWND hWnd = WindowFromPoint(pt);
// 後はいつも通りの表示処理を行う
int tLen = GetWindowTextLength(hWnd) + 2; // タイトル文字長取得
char *sTitle = (char *)malloc(tLen); // タイトル格納用領域確保
GetWindowText(hWnd, sTitle, tLen); // タイトル取得
// Editに表示
HandleEdit->Text = IntToHex((int)hWnd, 8);
TitleEdit->Text = sTitle;
// 解放
free(sTitle);
}
//---------------------------------------------------------------------------