gpt4 book ai didi

delphi - 为什么从服务安装时我的钩子(Hook) DLL 不起作用?

转载 作者:行者123 更新时间:2023-12-03 18:38:06 31 4
gpt4 key购买 nike

我在我的 DLL 中声明了这些函数。如果我在独立应用程序中使用它们,一切顺利,但在服务中使用它们时,我没有得到任何结果。没有钩子(Hook)。

function HookProc(code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := CallNextHookEx(Code, code, wParam, lParam)
end;

procedure StartHook; stdcall;
begin
HookHandle := SetWindowsHookEx(WH_GETMESSAGE, HookProc, hInstance, 0);
end;

procedure StopHook; stdcall;
begin
UnhookWindowsHookEx(HookHandle);
end;

问题仅存在于 Vista 及更高版本。

最佳答案

您正在尝试将应用程序挂接到不同的桌面上。 dwthreadId 的文档 SetWindowsHookEx 的参数告诉你你不能这样做:

The identifier of the thread with which the hook procedure is to be associated. If this parameter is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread.



请记住,Vista up 中的 session 0 隔离意味着您的服务在与任何交互式桌面不同的 session (因此也就是不同的桌面)中运行。

我想还有其他原因会从 session 0 停止此工作。您将需要从与您希望 Hook 的进程位于同一桌面的进程中运行此代码。

关于delphi - 为什么从服务安装时我的钩子(Hook) DLL 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10390466/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com