Отправка ключа «зависает» ПК в C # - PullRequest
4 голосов
/ 18 декабря 2010

Мой компьютер зависает, когда я 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 Ответ

10 голосов
/ 18 декабря 2010

Я репро, Win7 и VS2008.Это похоже на довольно неприятный тупик, вы можете выйти из него, нажав Ctrl + Esc на клавиатуре.По умолчанию SendKeys использует хук Windows для ввода ключей.У хуков Windows могут быть довольно неприятные побочные эффекты, но я без колебаний назвал бы это ошибкой Windows.

Чтобы исправить это, используйте Project + Add New Item и выберите шаблон элемента Файл конфигурации приложения.Сделайте так, чтобы это выглядело так:

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

Если это действительно означает отправку нажатия клавиши на форму, то есть лучшие способы сделать это.

...