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

SetWindowsHookEx的問題,將聆聽的按鍵事件改成滑鼠事件

答題得分者是:Kingron
lcc1299
一般會員


發表:39
回覆:42
積分:21
註冊:2004-09-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-01 01:28:10 IP:203.70.xxx.xxx 未訂閱
不好意思,我解釋一下底下的程片段,當SetWindowsHookEx執行時,如何修改第二個function讓它變成我按一下滑鼠左鍵,他就會開啟一個記事本呢?,現在的程式碼是我按一下鍵盤的B鍵,他會開啟一個記事本。 66為B。 是改成…SetWindowsHookEx(WH_MOUSE,...............) 然後第二個等待的function改成If ((lParam and _KeyPressMask)=0) and(wParam = 1) then begin 按下mouse的左鍵是1嗎?還是…....我是這樣測,但不行,如果各位大大知道的話,請教我一下吧,謝謝^__^"!(就是把底下聆聽的事件(原按鍵B)改成(mouse左鍵點一下))。 .......... .......... function EnableHotKeyHook:BOOL;export; begin   Result:=False;   if hNextHookProc <> 0 then Exit;   hNextHookProc:=SetWindowsHookEx(WH_KEYBOARD,KeyboardHookHandler,HInstance,0);   Result:=hNextHookProc <> 0; end; .......... .......... function KeyboardHookHandler(iCode:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;export; const _KeyPressMask=$80000000; begin   Result:=0;   If iCode<0 Then begin Result:=CallNextHookEx(hNextHookProc,iCode,wParam,lParam); Exit; end; If ((lParam and _KeyPressMask)=0) and(wParam = 66) then begin Result:=1; WinExec('Notepad.exe',sw_Normal); end; end;
Kingron
中階會員


發表:1
回覆:51
積分:60
註冊:2005-09-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-01 15:38:08 IP:61.145.xxx.xxx 未訂閱
下面的代码就可以了,不过只能Hook本程序内的,如果要Hook所有的窗口,写一个DLL即可。 var hNextHookProc: HHOOK; function HookHandler(iCode:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT; stdcall; begin Result := 0; if iCode < 0 then Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam) else begin if wParam = WM_LBUTTONDOWN then begin WinExec('Notepad.exe',sw_Normal); Result := 1; end else Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam); end; end; procedure Hook; begin hNextHookProc := SetWindowsHookEx(WH_MOUSE, HookHandler, HInstance, MainThreadID); Form1.Caption := SysErrorMessage(GetLastError); end; procedure UnHook; begin if hNextHookProc <> 0 then UnhookWindowsHookEx(hNextHookProc); end; procedure TForm1.FormCreate(Sender: TObject); begin Hook; end; procedure TForm1.FormDestroy(Sender: TObject); begin UnHook; end;
------
超级猛料:http://kingron.delphibbs.com
lcc1299
一般會員


發表:39
回覆:42
積分:21
註冊:2004-09-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-01 15:51:28 IP:203.70.xxx.xxx 未訂閱
Kingron你好,我試過了,可以謝謝~~可以再請問一下,他參數裡面的wparam和lparam是差別在那裡,是在什麼做什樣的比較用的呢?還有~~Result:=0和等於1的用意。謝謝~~ 發表人 - lcc1299 於 2005/10/01 15:54:17
Kingron
中階會員


發表:1
回覆:51
積分:60
註冊:2005-09-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-07 14:10:54 IP:61.145.xxx.xxx 未訂閱
抱歉,我不是经常来KTOP,所以很可能不能及时回复。 wParam和lParam都是Windows的消息参数。 wParam一般情况下是消息类型,例如WM_CLOSE,WM_XXXXX等 lParam为该消息对应的参数信息,参看该消息的说明即可,MSDN中有详细说明。 Result :=0 表明Windows应该继续发送该消息到目标窗口,如果你的HookProc已经处理了某个消息,不喜欢被继续处理,则可以返回大于0的值来阻止Windows继续传递该消息。 在MSDN中均有详细说明。
------
超级猛料:http://kingron.delphibbs.com
系統時間:2024-05-06 22:14:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!