在C#中发送键“挂起”PC

时间:2010-12-18 17:36:15

标签: c# .net sendkeys hang

当我send key Form_Shown()并将Breakpoint放在Form_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");
 }

1 个答案:

答案 0 :(得分:10)

我责备,Win7和VS2008。这看起来像一个相当讨厌的死锁,你可以通过按键盘上的Ctrl + Esc来摆脱它。默认情况下,SendKeys使用Windows挂钩来注入密钥。 Windows挂钩可能会有相当不愉快的副作用,但我会毫不犹豫地将其称为Windows错误。

要修复它,请使用Project + Add New Item并选择Application Configuration File项目模板。看起来像这样:

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

如果这真的是为了向您的表单发送击键,那么有更好的方法来实现它。