Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 正在使用钥匙钩_Delphi_Key_Hook - Fatal编程技术网

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到您的服务