gpt4 book ai didi

c# - 使用低级键盘 Hook 更改键盘字符

转载 作者:行者123 更新时间:2023-11-30 21:22:55 25 4
gpt4 key购买 nike

我正在创建自定义键盘布局。作为开始步骤,我想让用户按下一个键,让我的键盘钩子(Hook)拦截它,并输出我选择的不同键。

我找到了这个键盘钩子(Hook)代码,我正试图为我的目的稍微修改一下: http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspx

我把相关的方法改成了这样:

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
KBDLLHOOKSTRUCT replacementKey = new KBDLLHOOKSTRUCT();
Marshal.PtrToStructure(lParam, replacementKey);
replacementKey.vkCode = 90; // char 'Z'
Marshal.StructureToPtr(replacementKey, lParam, true);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}

我希望它声明一个新的 KBD 结构对象,将键盘钩子(Hook)提供的 KBD 结构复制到其中,修改对象的 vkCode 以使用不同的字符,然后用修改后的版本覆盖提供的对象。这应该希望保持一切相同,除了它写了一个不同的字符。

不幸的是,它不起作用。键入原始键盘字符。 Visual Studio 输出 Pane 还会出现 A first chance exception of type 'System.ArgumentException' occurred in MirrorBoard.exe 错误。

我可以在这里做什么来拦截键盘钩子(Hook)并将其替换为我选择的字符?

谢谢!

最佳答案

Marshal.PtrToStructure 的第二个参数必须是类而不是结构,KBDLLHOOKSTRUCT 可能是结构。

相反,你应该像这样使用它:

KBDLLHOOKSTRUCT replacementKey = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));
replacementKey.vkCode = 90; // char 'Z'
Marshal.StructureToPtr(replacementKey, lParam, false);

关于c# - 使用低级键盘 Hook 更改键盘字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2062748/

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