win32 APIを使用してキーストロークを読み取るにはどうすればよいですか?また、ドイツ語のウムラウトのような国際的なキーボードからそれらを見たいと思います。
ありがとう
win32 APIを使用してキーストロークを読み取るにはどうすればよいですか?また、ドイツ語のウムラウトのような国際的なキーボードからそれらを見たいと思います。
ありがとう
キーボードを押すことと、それらが生成する文字には違いがあります。
最下位レベルでは、キーボードの状態をポーリングできますGetKeyboardState
。キーロギング マルウェアは、ほとんどの権限を必要とせず、焦点がどこにあるかに関係なくすべてを見ることができるため、これがよく行われる方法です。このアプローチの問題点は (一定のポーリングが必要なことに加えて)、キーボードの状態をキーストロークにまとめてから、キーストロークを文字ストリームにまとめる必要があることです。キーボードがどのようにマッピングされているか、Shift キー、Control キー、Alt キーなどの状態を保持している必要があります。オートリピート、デッド キー、およびその他の合併症について知っておく必要があります。
Jens が回答で述べたように、特権があれば、キーボード フックをインストールできます。
フォーカスがあり、コンソール アプリの場合は、関数の 1 つを使用して標準入力から読み取ります。Windows では、真の Unicode 入力を取得するのは困難です。通常、コンソール ウィンドウの現在のコード ページに対応する、いわゆる ANSI 文字が表示されます。コード ページがわかっている場合はMultiByteToWideChar
、シングルバイトまたはマルチバイトの入力を UTF-16 (Windows のドキュメントでは Unicode と呼んでいます) に変換するために使用できます。そこから、UTF-8 (を使用WideCharToMultiByte
) またはその他の必要な Unicode エンコーディングに変換できます。
集中力があり、GUI アプリを使用している場合は、WM_KEYDOWN
(および友人と) キーストロークを確認できます。WM_CHAR
完全に解決された UTF-16 文字(または からの UTF-32 )を取得することもできますWM_UNICHAR
。それらから UTF-8 が必要な場合は、変換を行う必要があります。
フォーカスに関係なくキーボード入力を取得するには、おそらくキーボードをフックする必要があります。
WH_KEYBOARD または WH_KEYBOARD_LLでSetWindowsHookExを見てください。Unicode バリアントの呼び出しに W を追加します。