3

キーストロークを記録して再生する必要のあるプログラムに取り組んでいます。メインプロセスはサービスとして実行されるため、キーストロークを記録するための構成プログラムが必要です。

問題は、システムのデフォルトのキーボードレイアウトが(たとえば)英語であり、現在のユーザーのキーボードレイアウトが(たとえば)ドイツ語である場合に発生します。ユーザーは構成インターフェースに「ü」文字を入力します。これは適切に記録および保存されます。

ここで、ユーザーはメモ帳を実行し、サービスの子によって行われるキーストロークの再生を試みます。入力をに変換してに渡す場合SendInput、を呼び出しますVkKeyScan。これにより、このキーボードでその文字を再現する方法がないことがわかります(デフォルトのキーボードレイアウトは英語であることに注意してください)。

私が本当にやりたいのは、サービスのキーボードレイアウトと現在のフォアグラウンドアプリケーションを同期することです。これにより、サービスは、ユーザーがキーボードで使用できる任意の文字を再現できます。GetKeyboardLayout現在のプロセスでのみ機能します。これは32ビットと64ビットの両方で実行する必要があるため、メッセージフックは推奨されません:)。

4

1 に答える 1

5

フォアグラウンドウィンドウのキーボードレイアウトを取得するには、次の手順に従います。

GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL))

キーストロークではなく文字を録音しているようです。再生時にキーストロークを送信する代わりに、SendMessageを使用して、キーストロークを生成する代わりに、記録された文字を含むWM_CHARメッセージを送信できますか?

于 2009-06-05T02:34:53.637 に答える