0

c# で winapi を使用してキーの組み合わせを送信すると、奇妙な問題が発生します。私の目標は、fe SHIFT + HOME という 2 つのキーを送信する方法を作成することです。

 private const int WM_KEYDOWN = 0x0100;
 private const int WM_KEYUP = 0x0101;

 [DllImport("user32.dll")]
 static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

 public static void SendKey(byte key1, byte key2)
 {
      //SHIFT down
      keybd_event(key1, 0, WM_KEYDOWN, UIntPtr.Zero);
      //press HOME
      keybd_event(key2, 0, WM_KEYDOWN, UIntPtr.Zero);
      keybd_event(key2, 0, WM_KEYUP, UIntPtr.Zero);
      //SHIFT up
      keybd_event(key1, 0, WM_KEYUP, UIntPtr.Zero);
 }

問題は、メソッドの実行が終了した後でも key1 (SHIFT) が押されていることです。つまり、追加のメソッド呼び出しは、前回の実行で SHIFT を押した状態で開始されます。非常にシンプルに見えますが、機能させるための解決策が見つかりません。関連するSOの質問をたくさん見て試してみましたが、問題はまだ実際にあります。どんな助けでも大歓迎です。

4

1 に答える 1

1

keybd_eventドキュメントをチェックしてください!特に、3 番目のパラメーターのフラグ。あなたのコードでは、各キーを 2 回押して、どちらも離していません。

ウィンドウ メッセージの定数KEYEVENTF_KEYUP (0x2)を depress に置き換え、keydown を単純にゼロに置き換えます。

また、 .NETsクラスを見たいと思うかもしれません。SendKeys

于 2012-09-20T21:02:57.393 に答える