キーストロークを記録して再生する必要のあるプログラムに取り組んでいます。メインプロセスはサービスとして実行されるため、キーストロークを記録するための構成プログラムが必要です。
問題は、システムのデフォルトのキーボードレイアウトが(たとえば)英語であり、現在のユーザーのキーボードレイアウトが(たとえば)ドイツ語である場合に発生します。ユーザーは構成インターフェースに「ü」文字を入力します。これは適切に記録および保存されます。
ここで、ユーザーはメモ帳を実行し、サービスの子によって行われるキーストロークの再生を試みます。入力をに変換してに渡す場合SendInput
、を呼び出しますVkKeyScan
。これにより、このキーボードでその文字を再現する方法がないことがわかります(デフォルトのキーボードレイアウトは英語であることに注意してください)。
私が本当にやりたいのは、サービスのキーボードレイアウトと現在のフォアグラウンドアプリケーションを同期することです。これにより、サービスは、ユーザーがキーボードで使用できる任意の文字を再現できます。GetKeyboardLayout
現在のプロセスでのみ機能します。これは32ビットと64ビットの両方で実行する必要があるため、メッセージフックは推奨されません:)。