我想开发一个按键转换器,它可以将任何按键转换为我的本地语言。例如,如果用户输入“a”,那么它将被替换为相应的unicode字母“\u0995”
我使用的代码类似于:https://stackoverflow.com/global-low-level-keyboard-hook-freezing-in-c-net-3-5在那里,我编辑如下:
// MessageBox.Show("Test"); // I do not want this so commented
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)(vkCode + 2));
SendKeys.Send("mmm"); // mmm will be my desired unicode character
现在,我打开任何应用程序并键入任何我输入的字母和“mmm”。
例如,如果我输入: abcd ,则输出为: mmmcmmmdmmmemmmf ......... [输出]
现在我的问题是,
1)如何编辑此代码以发送unicode字母而不是字母? (我的意思是,如果我键入“p”,那么我希望其他应用程序应该接收类似于此unicode字符的unicode字符:“0996”
2)如何确保只将unicode字符发送到其他应用程序,不得附加键入的字符。我的意思是,我不想在[输出]
上面的输出中输入unicode字符和输入英文字母答案 0 :(得分:1)
1)如何编辑此代码以发送 unicode字母而不是字母?
SendKeys.Send()也可以发送Unicode印字符。例如
SendKeys.Send("খ");
如果您想使用Unicode代码发送字符,那么
SendKeys.Send('\u0996'.ToString());
2)如何确保只有unicode 字符被发送给其他人 应用
如果代码在 KeyDown 事件函数中,您可以通过在 SendKeys.Send()语句之后使用以下来禁止输入实际键:
e.Handled == true;
答案 1 :(得分:0)
AFAIK,挂钩用于监控,因此不确定它是否正确用于您正在尝试的操作。但是在你的代码中,也许你可以跳过调用下一个钩子“CallNextHookEx”,这可能会吞下键入的键。请注意,您应该有条件地吞咽,否则您可能会阻止ALT和CTL等按键。
答案 2 :(得分:0)
我不太确定,但如果您不调用CallNextHookEx
但是返回空指针,我认为您可以中断链。但是这通常是你不应该做的事情;)
最诚挚的问候,
Oliver Hanappi
答案 3 :(得分:0)
跳过调用CallNextHookEx
以防止特定键事件传播。
Re:使用SendKeys输入Unicode输入:“如果您的应用程序适用于各种键盘的国际使用,使用Send可能会产生不可预测的结果,应该避免使用。” - MSDN基本上我认为SendKeys并不明确支持发送Unicode输入。
您是否看过Microsoft Text Services Framework而不是您尝试的这种方法?我认为这基本上是为了解决你想要做的事情。