私が取り組んでいるプロジェクトでは、キーの組み合わせを区別してキーボードにグローバルキーストロークを記録し、コントロールキー(左または右)を押したままにする必要があります。唯一可能な方法は、KeyPress
ではなくKeyDown
とKeyUp
イベントを使用することです。しかし、どの文字が入力されたのかを記録する必要もあります。Shift + 1を!に変換してください。 C#のシンボル#
KeyPress
イベントを使用すると、私はいつも正しい文字を取得しますが、KeyDown
とKeyUp
イベントでは、キーの組み合わせに関係なくKeyCodeのみを提供します。解決策の1つは、Dictionary
を使用してShiftキーをマッピングすることですが、異なるローカライズされたキーボードには異なる記号があるため、国際的な環境には向いていません。たとえば、Shift-2
は、USキーボードの場合は@
シンボル、英国キーボードの場合は"
シンボルです。
手動ですべてのキーボードレイアウトをマッピングせずに組み合わせを自動的に変換する方法があるのだろうか?
少し複雑ですがトピック以外の質問は、ユーザーがキーに異なる出力を与えるためにいくつかのソフトウェアキーマッピングプログラムを使用するかどうかです。たとえば、a
とs
を交換すると、a
と入力するとs
が出力され、その逆も同様です。世界的なフックのために何が起こるでしょうか?私はこの種のソフトウェアがインストールされていないので、私はそれをテストすることはできません、誰もそれを処理するいくつかの経験がありますか?
ありがとうございました!私はToAscii()を早期に見ていましたが、解決策を研究していましたが、それは正しくできませんでした。私は修飾キーのビット、すなわち 'Keys.ShiftKey'と' Keys.Shift'を混乱させたようです。 –
うん、私はShiftとShiftキーと同じ問題を抱えていた。これは、ToAsciiが必要とするものとイベント引数に含まれているものである。したがって、ToString()を使ってやや厄介な構造になってから、明示的にShiftKeyを渡します。あなたのプロジェクトに幸運。 – LocEngineer