delphi 键盘全局钩子
functionKeyHook(nCode:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;beginif(wP...
function KeyHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
if (wParam = VK_CONTROL) then
begin
//代码........
end;
Result := CallNextHookEx(hook, nCode, wParam, lParam);
end;
-------------------------------
hook := SetWindowsHookEx(WH_KEYBOARD, @KeyHook, HInstance, 0);
//建立
钩子的代码就是这么写的,为什么做出来以后,只能勾自己的EXE不能勾全局的?
不是不给分,采纳就加分。
回复 warmwormn :
我是放到DLL里面的
回复 yangyxd:
WH_KEYBOARD_LL, 这个是在哪里啊? 不在windows 里面哦。
我 Const 它 =13 以后, 更勾不上了…… 展开
begin
if (wParam = VK_CONTROL) then
begin
//代码........
end;
Result := CallNextHookEx(hook, nCode, wParam, lParam);
end;
-------------------------------
hook := SetWindowsHookEx(WH_KEYBOARD, @KeyHook, HInstance, 0);
//建立
钩子的代码就是这么写的,为什么做出来以后,只能勾自己的EXE不能勾全局的?
不是不给分,采纳就加分。
回复 warmwormn :
我是放到DLL里面的
回复 yangyxd:
WH_KEYBOARD_LL, 这个是在哪里啊? 不在windows 里面哦。
我 Const 它 =13 以后, 更勾不上了…… 展开
2个回答
展开全部
WH_KEYBOARD 对于全局的效果不好用, 换用 WH_KEYBOARD_LL 钩子吧。
示例代码:
//全局键盘钩子消息处理函数
function KeyHookProc(nCode:Integer; wP:WPARAM; lP:LPARAM):LRESULT; stdcall;
var
pEvt: TEventMsg;
vKey: Cardinal;
begin
if (nCode = HC_ACTION) then begin
vKey := 0;
case wP of
WM_SYSKEYDOWN, WM_KEYDOWN:
begin
pEvt := PEventMsg(LP)^;
vKey := LOBYTE(pEvt.message);
case vKey of
......
end;
end;
end;
WM_SYSKEYUP, WM_KEYUP:;
end;
end;
result := CallNextHookEx(hKeyHook, nCode, wP, lP);
end;
安装钩子:
hKeyHook := SetWindowsHookEx(WH_KEYBOARD_LL, @KeyHookProc, hInstance, 0);
示例代码:
//全局键盘钩子消息处理函数
function KeyHookProc(nCode:Integer; wP:WPARAM; lP:LPARAM):LRESULT; stdcall;
var
pEvt: TEventMsg;
vKey: Cardinal;
begin
if (nCode = HC_ACTION) then begin
vKey := 0;
case wP of
WM_SYSKEYDOWN, WM_KEYDOWN:
begin
pEvt := PEventMsg(LP)^;
vKey := LOBYTE(pEvt.message);
case vKey of
......
end;
end;
end;
WM_SYSKEYUP, WM_KEYUP:;
end;
end;
result := CallNextHookEx(hKeyHook, nCode, wP, lP);
end;
安装钩子:
hKeyHook := SetWindowsHookEx(WH_KEYBOARD_LL, @KeyHookProc, hInstance, 0);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
正常,全局钩子啊
不是运行在你的程序里的
要进行代码注入
所以全局钩子一定要放在动态库里
然后由你的程序把这个动态库调用进行
再然后,系统会把这个动态库注入到别的程序里
再再然后,别的程序会在键盘操作时调用到这个动态库
再再再然后,你的动态库要把别的程序的操作回发到你的程序里来
再再再再然后,你的程序就可以收到操作了
注意:这个动态库操作的全部是系统全局变量,所有本程序里的变量
如HWND等等都是不能直接操作的
不是运行在你的程序里的
要进行代码注入
所以全局钩子一定要放在动态库里
然后由你的程序把这个动态库调用进行
再然后,系统会把这个动态库注入到别的程序里
再再然后,别的程序会在键盘操作时调用到这个动态库
再再再然后,你的动态库要把别的程序的操作回发到你的程序里来
再再再再然后,你的程序就可以收到操作了
注意:这个动态库操作的全部是系统全局变量,所有本程序里的变量
如HWND等等都是不能直接操作的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询