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 文字「0996」に似た Unicode 文字を受信する必要があります。

2) Unicode 文字のみが他のアプリケーションに送信されるようにする方法。入力した文字を追加してはなりません。つまり、上記の出力のようにユニコード文字と入力された英字は必要ありません[出力]

4

4 に答える 4

1

1)このコードを編集して、文字の代わりにUnicode文字を送信するにはどうすればよいですか?

SendKeys.Send()は、UnicodeIndic文字も送信できます。

SendKeys.Send("খ");

Unicodeコードを使用して文字を送信する場合は、

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

2)Unicode文字のみが他のアプリケーションに送信されるようにするにはどうすればよいですか?

コードがKeyDownイベント関数内にある場合は、 SendKeys.Send()ステートメントの直後に次のコマンドを使用して、入力されている実際のキーを抑制できます。

e.Handled == true;
于 2011-03-27T11:40:39.187 に答える
0
  1. CallNextHookEx特定のキーイベントが伝播しないようにするには、呼び出しをスキップします。

  2. Re:SendKeysを使用してUnicode入力を入力する:「アプリケーションがさまざまなキーボードでの国際的な使用を目的としている場合、Sendを使用すると予測できない結果が生じる可能性があるため、避ける必要があります。」--MSDN 基本的に、SendKeysはUnicode入力の送信を明示的にサポートしていないと思います

あなたが試みているこのアプローチの代わりに、Microsoft Text Services Frameworkを見たことがありますか?基本的には、あなたがやろうとしていることに取り組むことを目的としています。

于 2010-11-04T09:03:21.603 に答える
0

よくわかりませんが、呼び出さずCallNextHookExにnullポインターを返すと、チェーンを中断できると思います。しかし、これは通常はやるべきではないことです;)

よろしく、
オリバーハナッピ

于 2010-11-04T08:57:13.853 に答える
0

私の知る限り、フックは監視用であるため、あなたがやろうとしていることに対する正しいアプローチかどうかはわかりません。ただし、コードでは、次のフック「CallNextHookEx」の呼び出しをスキップできる可能性があり、入力されたキーを飲み込む可能性があります。条件付きで飲み込む必要があることに注意してください。そうしないと、ALT や CTL などのキーがブロックされる可能性があります。

于 2010-11-04T08:51:44.287 に答える