滑鼠停留的捷徑圖示或按鈕可否偵測出來? |
尚未結案
|
raintree777
一般會員 發表:11 回覆:7 積分:3 註冊:2004-07-20 發送簡訊給我 |
|
raintree777
一般會員 發表:11 回覆:7 積分:3 註冊:2004-07-20 發送簡訊給我 |
|
m8815010
版主 發表: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站上相關文章 這裏無法說的太清楚! >! >! |
raintree777
一般會員 發表:11 回覆:7 積分:3 註冊:2004-07-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |