Member 14130699 Ответов: 2

Код не будет выполняться, когда приложение не сфокусировано?


private void Form1_KeyDown_1(object sender, KeyEventArgs e)
      {

           this.KeyPreview = true;
           this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown_1);
           if (textBox1.Text.Equals("1") && e.Control && e.KeyCode == Keys.D1)
           {

               textBox1.Text="2";
           }


Этот код не будет выполняться, когда я сверну приложение windows form, но только тогда, когда приложение сфокусировано. Как мне это исправить?

Что я уже пробовал:


0x01AA

А) "но только тогда, когда приложение сфокусировано":
Вот как это работает. Приложение получает только события клавиатуры (и другие), когда приложение имеет фокус.
б) это очень плохая идея, чтобы сделать this.KeyDown += внутри обработчика событий. Вы должны сделать это один раз, например, в FormLoad whatever.
c.) чтобы решить ваш запрос, вам нужно подключиться к windows api. Что-то вроде этого: Крючки - приложения Win32 | Microsoft Docs[^] соответственно. для c# Это простой в использовании крючки Windows, даже из C# | Microsoft Docs[^]

phil.o

Это было бы квалифицировано для правильного ответа :)

0x01AA

Спасибо :)

2 Ответов

Рейтинг:
9

0x01AA

Есть несколько вещей, которые следует упомянуть

один.) "но только тогда, когда приложение сфокусировано":
Вот как это работает. Приложение получает только события клавиатуры (и другие), когда приложение имеет фокус.

б) это очень плохая идея, чтобы сделать this.KeyDown += ... внутри обработчика событий. Вы должны сделать это один раз, например, в FormLoad whatever.

c.) чтобы решить ваш запрос, вам нужно подключиться к windows api. Что-то вроде этого:
Это простой в использовании крючки Windows, даже из C# | Microsoft Docs[^]


Рейтинг:
16

MadMyche

Возможно, эта статья, опубликованная здесь несколько лет назад, может помочь вам:
CodeProject: обработка глобальных Крючков мыши и клавиатуры в C#[^]