Delphi 正在使用钥匙钩
你好,我有以下代码:Delphi 正在使用钥匙钩,delphi,key,hook,Delphi,Key,Hook,你好,我有以下代码: var KeyHook: HHOOK; function KeyHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; type PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT; TKBDLLHOOKSTRUCT = packed record vkCode: DWORD; scanCode: DWORD; flag
var
KeyHook: HHOOK;
function KeyHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
type
PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT;
TKBDLLHOOKSTRUCT = packed record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: DWORD;
end;
const
LLKHF_ALTDOWN = $20;
var
pkbhs: PKBDLLHOOKSTRUCT;
begin
pkbhs := PKBDLLHOOKSTRUCT(lParam);
if nCode = HC_ACTION then
begin
if (pkbhs^.vkCode = VK_ESCAPE) and WordBool(GetAsyncKeyState(VK_CONTROL) and $8000) then
begin
Result := 1;
Exit;
end;
end;
Result := CallNextHookEx(KeyHook, nCode, wParam, lParam);
end;
initialization
KeyHook := SetWindowsHookEx(WH_KEYBOARD_LL, @KeyHookProc, 0{HInstance}, 0);
if KeyHook = 0 then
RaiseLastOSError;
当我把它作为一个过程来开始的时候,它的效果很好
但当我试着让它在服务状态下工作时,它不起作用
不工作=不检测按键笔划。
我做错了什么
谢谢 在Vista和更高版本下,服务在独立会话(会话0)中运行。键盘与生活在不同会话中的交互式用户的桌面相关联。因此,您的服务与键盘完全隔离。您需要在交互用户的桌面上运行进程
如果您在XP上运行,“允许服务与桌面交互”选项可能允许钩子在服务上下文中生效。不过,不建议使用这种方法。您应该编辑问题,删除不应该出现的部分。如果您使用发布问题的同一帐户登录,则可以这样做;只需单击问题下方的
编辑链接即可。你还应该解释“它不起作用”的意思,因为没有更多的信息,我们就无法提供帮助。“它不工作”可以指从“它引发异常”到“什么也没发生”到“我的电脑爆炸”的任何事情。更加具体会提高你得到答案的机会。:)你似乎在尝试一些不可能的事情:赢得9分或10分的方法是什么。你有任何与通用方法的联系吗?试图通过windows服务捕获密钥-读取了几天,仍然卡住;)@seb您不会在服务中捕获密钥(我必须这么做;)到星期日为止;)@塞布,你不会的。告诉自己必须做一些不可能的事情是没有意义的。@Seb是的,在用户会话中处理,ipc到您的服务