Использование программируемых клавиш в С#?

Я хочу создать простое приложение, которое при запуске будет ждать определенной клавиши или комбинации клавиш ИЛИ даже нажатия кнопки мыши. Я использую MouseKeyHook API, чтобы получить эту информацию, однако у меня есть несколько проблем.

Кажется, это работает отлично, так как я могу сравнить строковые значения кнопок с тем, что я сохранил. Вот здесь и начинается настоящая проблема. Всякий раз, когда я нажимаю любую программируемую кнопку на клавиатуре, я не получаю НИКАКОГО вывода? Почему?

private void GlobalHookKeyPress(object sender, KeyPressEventArgs e)
{
    HotKey.Text = e.KeyChar.ToString();
}

private void GlobalHookMouseDownExt(object sender, MouseEventExtArgs e)
{
    HotKey.Text = e.Button.ToString();
}

При перехвате с использованием MouseKeyHook API я смог получить две кнопки мыши XButton1 и XButton2, но ничего не получил для кнопок клавиатуры.

введите здесь описание изображения


person Hunter Mitchell    schedule 23.11.2015    source источник
comment
Программируемые ключи, как правило, используют определенные API, для которых требуется программное обеспечение драйвера производителя.   -  person DavidG    schedule 23.11.2015
comment
@DavidG Звучит правильно, но как большинство игр могут обнаружить эти кнопки и разрешить их использование, а я не могу без программного обеспечения драйвера?   -  person Hunter Mitchell    schedule 23.11.2015
comment
@FeaRCODE Я могу ошибаться, но единственные программируемые кнопки, которые я видел работающими, были сопоставлены с различными комбинациями клавиш клавиатуры в драйвере мыши.   -  person xxbbcc    schedule 23.11.2015
comment
Вы настроили макросы в драйвере для этих кнопок? Обычно вы устанавливаете кнопку X для выполнения действия Y, где Y может быть количеством нажатий клавиш, вы должны иметь возможность выбирать эти сопоставленные действия.   -  person DavidG    schedule 23.11.2015
comment
@DavidG На самом деле нет. И я только что проверил это в игре. Мои кнопки мыши распознавались в игре, а кнопки на клавиатуре — нет.   -  person Hunter Mitchell    schedule 23.11.2015
comment
@xxbbcc Думаю, ты действительно прав. Если вы посмотрите на мой ответ на комментарий Дэвида.   -  person Hunter Mitchell    schedule 23.11.2015
comment
Если это так, как могут работать кнопки мыши? И отображаться как XButton1 и XButton2?   -  person Hunter Mitchell    schedule 23.11.2015
comment
Кнопки мыши довольно общие, Windows API позволяет использовать 8 кнопок. Для чего-то большего требуются драйверы конкретных производителей.   -  person DavidG    schedule 23.11.2015
comment
Спасибо, @DavidG. Если хотите, опубликуйте ответ с описанием того, что вы мне сказали. Это поможет другим, у которых такая же проблема.   -  person Hunter Mitchell    schedule 23.11.2015


Ответы (1)


Программируемые клавиши на клавиатуре, как правило, используют определенные API, для которых требуется программное обеспечение драйвера поставщика. Это программное обеспечение сопоставляет нажатие клавиши с действием (или последовательностью действий), которые преобразуются в стандартные операции. Например, нажатие кнопки X может соответствовать пятикратному нажатию клавиши A, и ваше программное обеспечение должно иметь возможность обрабатывать эти 5 нажатий.

Кнопки мыши довольно общие, и я считаю, что Windows API позволяет использовать 8 стандартных кнопок (см. "nofollow">ссылка на API здесь). Любое большее, чем это, снова требует определенных драйверов поставщика и сопоставления этих кнопок.

person DavidG    schedule 23.11.2015