4

を使用してキーストロークを別のアプリケーションに送信するアプリケーションを作成していますSendMessage

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam);

私はさまざまな引数を試してきましたが、送信するキーストロークに応じて、パラメーターに異なる引数を渡す必要があることに気付きましたint Msg

たとえば、の可能な値として次のように定義していますMsg

private static ushort WM_SYSKEYDOWN = 0x0104;
private static ushort WM_CHAR = 0x0102;
private static ushort WM_KEYDOWN = 0x0100;

3番目のパラメーターに渡される次のテストキーwParam

private static ushort VK_F1 = 0x70;
private static ushort VK_A = 0x41;
private static ushort VK_TAB = 0x09;

F1キー(VK_F1)を送信したい場合は、使用WM_SYSKEYDOWN中の場合にのみ機能します。キーを送信したい場合は、Aを使用した場合にのみ機能します。キーWM_CHARを送信したい場合は、を使用した場合にのみ機能します。TABWM_KEYDOWN

私の質問は次のとおりです。送信されているキーに基づいて、などをWM_KEYDOWNいつ使用するかを教えてくれるドキュメントはありますか?WM_SYSKEYDOWNまたは、おそらく私はそれを間違ってやっていて、どのキーでも機能する一貫した方法が1つありますか?

4

1 に答える 1

3

Microsoftは、これらのWMメッセージの違いをここでキーボード入力(Windows)について説明しています。

WM_SYSKEYDOWNウィンドウの切り替えに使用されるALT+などのシステムコマンドをシミュレートします。TAB

WM_CHARたとえば、テキストボックスへの入力などのユーザー入力をシミュレートします。

WM_KEYDOWN通常、と一緒に使用されWM_KEYUPます。WM_KEYDOWNメッセージ(Windows)を参照してください。

ほとんどの場合、を使用することをお勧めしますWM_CHAR

于 2012-11-22T14:43:57.493 に答える