1

我想开发一个按键转换器,它将任何按键转换为我的本地语言。例如,如果用户输入“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 字符和键入的英文字母[输出]

4

4 回答 4

1

1)如何编辑此代码以发送 unicode 字母而不是字母?

SendKeys.Send()也可以发送 Unicode 印度字符,例如

SendKeys.Send("খ");

如果要使用 Unicode 代码发送字符,则

SendKeys.Send('\u0996'.ToString());

2)如何确保只有 unicode 字符被发送到其他应用程序?

如果代码在KeyDown事件函数中,您可以在SendKeys.Send()语句之后使用以下命令来禁止键入的实际键:

e.Handled == true;
于 2011-03-27T11:40:39.187 回答
0

AFAIK,挂钩是为了监控,所以不确定它是否适合您尝试做的事情。但是在您的代码中,也许您可​​以跳过调用下一个挂钩“CallNextHookEx”,这可能会吞下键入的键。请注意,您应该有条件地吞下,否则您可能会阻止 ALT 和 CTL 等键。

于 2010-11-04T08:51:44.287 回答
0

我不太确定,但我认为如果你不调用CallNextHookEx而是返回一个空指针,你可以中断链。但这是你通常不应该做的事情;)

最好的问候,
奥利弗·哈纳皮

于 2010-11-04T08:57:13.853 回答
0
  1. 跳过调用CallNextHookEx以防止传播特定的关键事件。

  2. 回复:使用 SendKeys 输入 Unicode 输入:“如果您的应用程序旨在通过各种键盘在国际上使用,则使用 Send 可能会产生不可预知的结果,应避免使用。” - MSDN 基本上我认为 SendKeys 不明确支持发送 Unicode 输入。

您是否查看过 Microsoft文本服务框架而不是您正在尝试的这种方法?我认为它基本上是专门为解决您正在尝试做的事情而设计的。

于 2010-11-04T09:03:21.603 回答