SetWindowsHookEx的問題,將聆聽的按鍵事件改成滑鼠事件 |
答題得分者是:Kingron
|
lcc1299
一般會員 ![]() ![]() 發表:39 回覆:42 積分:21 註冊:2004-09-12 發送簡訊給我 |
不好意思,我解釋一下底下的程片段,當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 發送簡訊給我 |
下面的代码就可以了,不过只能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 發送簡訊給我 |
|
Kingron
中階會員 ![]() ![]() ![]() 發表:1 回覆:51 積分:60 註冊:2005-09-14 發送簡訊給我 |
抱歉,我不是经常来KTOP,所以很可能不能及时回复。 wParam和lParam都是Windows的消息参数。
wParam一般情况下是消息类型,例如WM_CLOSE,WM_XXXXX等
lParam为该消息对应的参数信息,参看该消息的说明即可,MSDN中有详细说明。
Result :=0 表明Windows应该继续发送该消息到目标窗口,如果你的HookProc已经处理了某个消息,不喜欢被继续处理,则可以返回大于0的值来阻止Windows继续传递该消息。
在MSDN中均有详细说明。
------
超级猛料:http://kingron.delphibbs.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |