4

値の文字列があり、各文字のウィンドウでキー押下イベントをシミュレートしたいと思います。

WM_KEYDOWNWM_CHAR、およびWM_KEYUPイベントをウィンドウに送信することを計画しています(これは、キーが手動で押されたときに発生するように見えるためです)。

これらのメッセージでは、仮想キーコードのテーブルに基づいてwParamでintを送信する必要があります。文字列をループして各文字を取得できますが、その文字を取得して仮想キーコードに対応する値に変換するにはどうすればよいですか?Convert.ToInt32()は機能しません。

4

7 に答える 7

10

VkKeyScanEx誰か?MSDNによるとそれ:

「文字を対応する仮想キーコードとシフト状態に変換します。」

VkKeyScanを使用することもできますが、VkKeyScanExに置き換えられていることに注意してください。)

于 2010-07-01T14:11:20.540 に答える
4

WM_KEYDOWN/UPの送信は面倒です。アプリケーション自体は、修飾キー(Shift、Alt、Ctrl)の状態とキーボードレイアウトを使用して、WM_KEYDOWNメッセージをすでにWM_CHARに変換しています。どちらも制御できず、ランダムに間違ったキャラクターを取得します。

WM_CHARメッセージを送信し、wparamを文字コードに設定するだけです。lparamについて心配する必要はありません。これを使用するアプリはほとんどありません。

于 2010-06-30T18:46:22.157 に答える
0

ASCII文字を取り、16進数に変換するように見えます。たとえば、16進数の「A」は41です。グラフによると、Aは0x41であり、これは正しいです(0xは16進数を爆発させます)。

于 2010-06-30T18:40:41.567 に答える
0

一般的に、、およびメッセージを直接送信する代わりに、WM_KEYDOWNWM_CHAR推奨WM_KEYUPSendInputまたは場合によっては(非推奨)を使用する必要がありますkeybd_event

于 2010-06-30T18:41:21.160 に答える
0

キーの押下をシミュレートするための高レベルのAPIを提供し、すべての低レベルのものを処理する入力シミュレータライブラリを使用できます。

于 2010-06-30T18:42:44.270 に答える
0

System.Windows.Forms.SendKeysアクティブウィンドウでのキーボード入力をシミュレートするための静的メソッドを持つWinFormsクラスです。

問題は、.NETには別のアプリケーションでウィンドウに焦点を合わせる方法がないことです(SendKeysドキュメントではそれを回避する方法について説明しています)。

于 2010-06-30T18:56:45.783 に答える
0

一般的な解決策は、SendMessageWinAPI関数を使用することです。 このリンクSendMessageの署名を説明し、サンプルのインポートを提供します。

そして、VKコードをマッピングするには、 MapVirtualKeyを使用する必要があります。マッピングは任意であり、論理的ではないと想定するのが最善です。

于 2010-06-30T19:02:40.233 に答える