john1990_1 Ответов: 1

Как узнать, нажат ли leftctrl другой клавишей на keydown и keyup globalkeyboadhook?


Я хочу знать, нажимается ли Ctrl с "C" дважды быстро, чтобы моя программа произносила текст в буфере обмена.

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

static globalKeyboardHook gkh = new globalKeyboardHook();
static void gkh_KeyUp(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {


                case Keys.LControlKey:
                    LCTRLPRESSED = false; break;
             }
        }

static void gkh_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {


                case Keys.LControlKey:
                    LCTRLPRESSED = true; break;
             }
        }


Но это иногда приводит к тому, что моя программа произносит текст без нажатия Ctrl, когда "C" нажимается дважды быстро, так как Ctrl отстает, пока я не нажму его снова, и он обновится до состояния up.

Есть:
если(например,контроль) {;}

Но это не работает правильно.

Есть также е. модификаторы, это работает? если да, то как?

1 Ответов

Рейтинг:
1

Maciej Los

Если вы хотите обнаружить, если CTRL+C был нажат, значит, вы должны использовать:

if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control)  {
    MessageBox.Show("You pressed CTRL+C");
}


john1990_1

Thx но извините даже когда я нажимаю влево или вправо Ctrl он все равно дает мне:
Модификаторы как "нет".

Maciej Los

Вы добавили клавишу CTRL в gkh?

gkh.HookedKeys.Add(Keys.LControlKey);

Пожалуйста, перейдите по ссылке ниже для получения более подробной информации: Простой Глобальный Низкоуровневый Крючок Клавиатуры C# [^]

john1990_1

Я сделал все, как описано, я даже использовал исходный код, на который вы ссылались, и когда я добавил:
if (e.модификаторы == ключи.Контроль) {;}
Он никогда не попадал в скобки, и даже когда я все еще держу LCtrl, модификаторы сказали: "Нет"