使用低级键盘挂钩更改键盘字符我正在创建自定义键盘布局。作为开始步骤,我希望用户按下一个键,让我的键盘钩子拦截它,然后输出我选择的另一个键。我发现了这个键盘钩子代码,为了我的目的我试图稍微修改它:http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspx我已经将相关方法更改为:privatestaticIntPtrHookCallback(intnCode,IntPtrwParam,IntPtrlParam){if(nCode>=0&&wParam==(IntPtr)WM_KEYDOWN){KBDLLHOOKSTRUCTreplacementKey=newKBDLLHOOKSTRUCT();Marshal.PtrToStructure(lParam,replacementKey);replacementKey.vk90;//char'Z'Marshal.StructureToPtr(replacementKey,lParam,true);}返回CallNextHookEx(_hookID,nCode,wParam,lParam);我想让它声明一个新的KBD结构对象,键盘钩子结构提供的KBD到它里面,修改我对象的vkCode以使用不同的字符,然后用我的修改版本覆盖提供的对象。这应该希望保持一切相同,除了它写了一个不同的字符。不幸的是,它没有用。键入原始键盘字符。VisualStudio输出窗格还出现了“System.ArgumentException”类型的第一次机会异常发生在MirrorBoard.exe错误中。我可以在这里拦截键盘挂钩并用我选择的字符替换它吗?谢谢!Marshal.PtrToStructure的第二个参数必须是类而不是结构,KBDLLHOOKSTRUCT可能是结构。相反,你应该这样使用它:以上是C#学习教程:使用低级键盘钩子改变键盘字符的所有内容分享,如果对你有用,需要进一步了解C#学习教程,希望你多加注意——KBDLLHOOKSTRUCTreplacementKey=(KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam,typeof(KBDLLHOOKSTRUCT));replacementKey.vkCode=90;//char'Z'Marshal.StructureToPtr(replacementKey,lParam,false);本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
