私は、キーストロークの記録と再生が必要なプログラムに取り組んでいます。メインプロセスはサービスとして実行されるので、キーストロークを記録するための構成プログラムが必要です。別のプロセス(Windows)のキーボードレイアウトを決定する方法は?
システムのデフォルトのキーボードレイアウトが英語で、その時のユーザーのキーボードレイアウトがドイツ語である場合に問題が発生します。ユーザは、コンフィギュレーションインターフェースに 'ü'文字を入力します。これは正式に記録され、保存されます。
ユーザーはメモ帳を実行し、サービスの子によって行われたキーストロークを再生しようとします。入力をSendInput
に変換すると、VkKeyScan
となり、このキーボードでその文字を再現する方法はありません(デフォルトのキーボードレイアウトは英語です)。
サービスのキーボードレイアウトと現在のフォアグラウンドアプリケーションを同期することができます。そのため、ユーザーはキーボードで任意の文字を再現できます。 GetKeyboardLayout
は現在のプロセスでのみ動作します。これは32ビットと64ビットの両方で動作するため、メッセージフックは好ましくない。フォアグラウンドウィンドウのキーボードレイアウトを取得するために
これはサービスからは機能しません(インタラクティブサービスからは動作しますが、インタラクティブサービスの使用は推奨されず、新しいバージョンのWindowsでは動作しません)。 – jdigital
なぜ私はこれを考えなかったのか分かりません。 @jdigitalは、サービスがユーザーのセッションでワーカープロセスを持っているため、実際に動作します。ありがとう! –