4

当我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");
 }
4

1 回答 1

11

我repro,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>

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

于 2010-12-18T18:22:30.093 回答