2017-06-07 8 views
0

CapsLockキーをWindowsのコントロールキーとして機能させるプログラムを開発しています。私はこれがレジストリの変更で簡単にできることを理解しています。残念ながら、私はそのレジストリの変更を実行することはできませんし、デバイスドライバを実行することもできません。仮想キーボードバッファにKEYEVENTF_KEYUPを送信した後に物理的なCapsLock位置を検出します。

私の考えは、バーチャルキーボードの上に来るキーカンを見ることです。 CapsLockダウンイベントが表示されたら、CapsLock Upイベント、2回目のCapsLockダウンイベント、2回目のCapsLock Upイベント、次にコントロールキーダウンイベントを送信します。このコードはすべて動作します!しかし、私はCapsLockキーの物理的なUPアクションを捕まえることができませんでした。

私はwin32api.GetKeyState()win32api.GetAsyncKeyState()の両方のCapsLock Upキーを試してみました。私がCapsLock upイベントを詰めた後、彼らは両方ともキーがアップしていると言っています。実際のハードウェアを見て、それがまだダウンしているのを見る方法はないようです。

仮想キーボードバッファに移動する前にイベントをキャッチする方法はありますか?もし私がそれをすることができれば、REAL CapsLock downイベントとUpイベントを捕まえることができました。しかし、私はそれを見つけるように見えることはできません。

私はこれをwin32 APIから完全に行うことができる必要があります。

+0

実際に使用している言語は問題ではありません。これはWIN32API呼び出しであるためです。この場合、言語はPythonですが、APIはC、C++、C#、アセンブラ、パスカル、およびWindows上で実行されるその他すべての言語でも使用できます。 – vy32

+0

'WM_KEY(DOWN | UP)'ウィンドウメッセージを処理するか、 'SetWindowsHookEx()'を使ってキーボードフックを書く。 –

答えて

1

GetKeyStateは、最後にメッセージを受信したときのスレッドの状態です。 GetAsyncKeyStateは現在の状態です。これらの関数は、状態の変更を取得しようとしている場合にイベントが発生する可能性があります。

低レベルのkeyboard hookを使用して、入力処理チェーンの早期にすべての入力を確認します。グローバルイベントを気にしない場合は、通常のキーボードフックでスレッドをフックすることもできます。

+0

それは素晴らしいです。私はWindowsのキーボードフックを使用することができるように見えます。私はそれを私のPythonプログラムに統合する必要があります。私はあなたの答えのおかげで、これを行うためのコードをいくつか見つけました。 (そして@レミー・ルボーの)。 – vy32