m8815010
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:99 回覆:372 積分:289 註冊:2003-11-13
發送簡訊給我
|
引言:
如題所言:
將滑鼠停留在桌面圖示上或停留在應用程式視窗上的x按鈕或捲軸按鈕之類的,
程式可辨別出他是一個Button類的物件?這該由什麼方向去著手呢?
raintree777你好 : 下以的方法大概可以達成你的目的,大概 class="code">
Unit1.cpp ~~ TForm1 *Form1; HHOOK hMouseHook; //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
LRESULT CALLBACK MouseHook(int iCode,WPARAM wParam,LPARAM lParam)
{
if (iCode>=0) {
if (iCode==HC_ACTION) { TEventMsg msg;
msg=*((TEventMsg*)(lParam)); if (msg.message==WM_MOUSEMOVE) { POINT p;
p.x=msg.paramL;
p.y=msg.paramH; HWND hwnd=WindowFromPoint(p); char buf[128];
ZeroMemory(buf,128);
GetWindowText(hwnd,buf,128);
Form1->Edit1->Text=AnsiString(buf); ZeroMemory(buf,128);
GetClassName(hwnd,buf,128);
Form1->Edit2->Text=AnsiString(buf);
}
}
return 0;
} return CallNextHookEx(hMouseHook,iCode,wParam,lParam);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
hMouseHook=SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)MouseHook,HInstance,0); if (!hMouseHook)
ShowMessage("Fail to Hook!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
UnhookWindowsHookEx(hMouseHook);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
UnhookWindowsHookEx(hMouseHook);
}
//---------------------------------------------------------------------------
程式操作方式:
1.按下button1,開始接收滑鼠目前位置
2.得到滑鼠位置後,利用WindowFromPoint這個function取得該位置視窗元件的Hwnd值
3.拿這個Hwnd值去利用GetWindowText、GetClassName function取得這視窗的text值和class值 例如:
1.滑鼠移動到一個Builder做成的button元件上
2.將會得到這個button的caption值顯示在Edit1內,如"Button1"
3.再來會得到這個button的class name值顯示在Edit2內==>TButton 程式限制處:
1.一般的視窗元件還ok
2.你說的Form上面右上角的那個 x 鍵是偵測不到的,因為那個鍵不是一個俱有hwnd值的真實鍵
3.你用本範例想要去點桌面上的圖示,它也是達不到效果的,原因類似上點! Conclusion
1.本方法如果要達成你題目所有的要求是不足的
2.本方法可以和不可以的地方請自行測試
3.範例有很多的東西,如果raintree777不是很了解的話,請儘量survey站上相關文章
這裏無法說的太清楚 !
>! >!
|