4

に置いて置くとsend keyPCがハングしますForm_Shown()BreakpointForm_KeyDown()

 private void Form1_KeyDown(object sender, KeyEventArgs e)
 {           //breakpoint here
        if (e.KeyCode == Keys.A)
        {
            MessageBox.Show("caught");
        }
 }
 private void Form1_Shown(object sender, EventArgs e)
 {
        SendKeys.Send("A");
 }
4

1 に答える 1

11

私は、Win7とVS2008を再現します。これはかなり厄介なデッドロックのように見えます。キーボードのCtrl+Escを押すことでデッドロックから抜け出すことができます。デフォルトでは、SendKeysはWindowsフックを使用してキーを挿入します。Windowsフックはかなり不快な副作用をもたらす可能性がありますが、私はこれをWindowsのバグと呼ぶことを躊躇しません。

これを修正するには、プロジェクト+新しいアイテムの追加を使用して、アプリケーション構成ファイルアイテムテンプレートを選択します。次のようにします。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="SendKeys" value="SendInput"/>
  </appSettings>
</configuration>

これが本当にキーストロークをフォームに送信することを意図している場合は、それを達成するためのより良い方法があります。

于 2010-12-18T18:22:30.093 に答える