線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1463
推到 Plurk!
推到 Facebook!

滑鼠停留的捷徑圖示或按鈕可否偵測出來?

尚未結案
raintree777
一般會員


發表:11
回覆:7
積分:3
註冊:2004-07-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-14 18:22:22 IP:140.134.xxx.xxx 未訂閱
如題所言: 將滑鼠停留在桌面圖示上或停留在應用程式視窗上的x按鈕或捲軸按鈕之類的, 程式可辨別出他是一個Button類的物件?這該由什麼方向去著手呢?
raintree777
一般會員


發表:11
回覆:7
積分:3
註冊:2004-07-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-15 12:43:08 IP:61.64.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24711 我發現這篇文章. 可否幫我解釋那位大大寫的一個小程式碼的觀念呢? 還有指令的功能?我對攔截視窗訊息有一點懂,但沒很了解指令功能.
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-15 14:34:49 IP:61.63.xxx.xxx 未訂閱
引言: 如題所言: 將滑鼠停留在桌面圖示上或停留在應用程式視窗上的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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-16 01:21:05 IP:61.62.xxx.xxx 未訂閱
謝謝樓上的大大, 我主要是想得到觀念,這些程式碼得讓我花個兩三天找相關用法. 不過大概流程以及概念了解了. 謝謝你花時間幫忙解思.^^
系統時間:2024-05-03 11:05:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!