4

win32 APIを使用してキーストロークを読み取るにはどうすればよいですか?また、ドイツ語のウムラウトのような国際的なキーボードからそれらを見たいと思います。

ありがとう

4

2 に答える 2

3

キーボードを押すことと、それらが生成する文字には違いがあります。

最下位レベルでは、キーボードの状態をポーリングできます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 が必要な場合は、変換を行う必要があります。

于 2010-05-06T17:04:06.270 に答える
1

フォーカスに関係なくキーボード入力を取得するには、おそらくキーボードをフックする必要があります。

WH_KEYBOARD または WH_KEYBOARD_LLでSetWindowsHookExを見てください。Unicode バリアントの呼び出しに W を追加します。

于 2010-05-04T14:15:19.503 に答える