gpt4 book ai didi

c# - 使用 Marshal 类时代码不执行的问题

转载 作者:行者123 更新时间:2023-11-30 15:13:31 25 4
gpt4 key购买 nike

我一直在用 C# 编写低级键盘 Hook 。它工作得很好,在按下任意键后,回调方法被执行,但是如果我尝试在该回调方法中使用 Marshal.ReadInt32Marshal.Copy 之类的东西,那么我的代码在我使用 Marshal 类的地方停止执行,这就像使用 Marshal 类一样像 return 语句一样工作。

private static IntPtr OnKeyEvent(int code, IntPtr wParam, IntPtr lParam)   
{
Console.WriteLine("Before");
int wP = Marshal.ReadInt32(wParam);
Console.WriteLine("After");

return CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
}

结果是:

Before,Before,Before,Before,Before etc

如果我注释掉 Marshal.ReadInt32 行:

Before,After,Before,After etc

这是为什么?

最佳答案

使用这个:

int wP = wParam.ToInt32();

您似乎正在为 WH_KEYBOARD_LL 或 WH_KEYBOARD 安装键盘钩子(Hook)。在这种情况下,wParam 值包含 WM_KEYDOWN (0x0100) 或 WM_KEYUP (0x0101) - 如您所说。您可以从 lParam 获取虚拟键码——它应该是一个有效的指针。所以你可以为 lParam 使用你的 marshal 函数:

int keyCode = Marshal.ReadInt32(lParam);

关于c# - 使用 Marshal 类时代码不执行的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57905156/

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