gpt4 book ai didi

c# - 在 Windows XP 中使用 SetWindowsHookEx 时出错,但在 Windows 7 中没有

转载 作者:太空狗 更新时间:2023-10-29 22:23:43 25 4
gpt4 key购买 nike

我开发了一个使用全局键盘/鼠标 Hook 的应用程序。它在 Windows 7 中运行完美,但在 Windows XP 中运行不佳。

当我在 Windows XP 中调用 SetWindowsHookEx 时,出现错误代码 1428

int MouseLowLevel   = 14
int code = SetWindowsHookEx(MouseLowLevel,
MouseHookProc,
IntPtr.Zero,
0);

private IntPtr MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) {}

最佳答案

很好奇这段代码在 Win7 上不会失败,但我当然从未尝试过。但这是正确的行为,看起来他们改进了它。 SetWindowsHookEx() 的参数验证需要有效的非零第三或第四参数。错误代码具有高度的描述性,来自 WinError.h:

//
// MessageId: ERROR_HOOK_NEEDS_HMOD
//
// MessageText:
//
// Cannot set nonlocal hook without a module handle.
//
#define ERROR_HOOK_NEEDS_HMOD 1428L

任何模块句柄都可以,因为它实际上并不用于低级 Hook ,不需要注入(inject) DLL 来使它们工作。 .NET 4 需要谨慎选择一个,因为它的 CLR 不再为纯托管程序集伪造模块句柄。一个很好用的是你从 pinvoking LoadLibrary("user32.dll") 中得到的那个,因为它总是已经加载了。您不必调用 FreeLibrary()。

您需要此声明来调用 LoadLibrary:

[DllImport("kernel32", SetLastError=true, CharSet = CharSet.Auto)]
private static extern IntPtr LoadLibrary(string fileName);

关于c# - 在 Windows XP 中使用 SetWindowsHookEx 时出错,但在 Windows 7 中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10516448/

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