Подавление глобальных сочетаний клавиш во время записи нажатий клавиш
Можно ли подавить глобальные сочетания клавиш Windows во время записи нажатий клавиш?
У меня есть приложение Windows Form, написанное на C#, и использующее эту библиотеку для записи нажатий клавиш для последующего использования в макросах. Теперь, когда я записываю комбинации клавиш, которые используются в Windows (например, L Control + Win + Стрелка вправо для изменения виртуального рабочего стола в Win 10), я бы хотел, чтобы мое приложение записывало его, но во время записи я не использовал окна, которые фактически его используют. довольно раздражает.
У меня есть флажок, чтобы включить захват ключа, при событии клика
m_KeyboardHookManager.KeyDown += HookManager_KeyDown;
HookManager_KeyDown просто так
private void HookManager_KeyDown(object sender, KeyEventArgs e)
{
Log(string.Format("KeyDown \t\t {0}\n", e.KeyCode));
string [] sArr = new string [2];
if (keyBindingArea1.Text != "")
{
sArr[0] = keyBindingArea1.Text;
sArr[1] = string.Format("{0}", e.KeyCode);
keyBindingArea1.Text = string.Join("+", sArr);
}
else
{
keyBindingArea1.Text = string.Format("{0}", e.KeyCode);
}
}
которые отображают комбинацию клавиш в элементе управления comboText. (Этот код взят непосредственно из демоверсии, прилагаемой к пакету.
Теперь запись работает хорошо, если, например, я нажимаю L Control + Win, затем я отпускаю клавиши и нажимаю третью (т. Е. Стрелку вправо), это не вызовет ярлыки Windows, но довольно неприятно, что это работает так.
Ценю любую помощь. Спасибо
1 ответ
Попробуй использовать e.Handled
собственность события. Если вы установите его true
это завершит цепочку обработки ключей. Как правило, другие приложения в цепочке обработки не получают его. Я не уверен, что он будет работать для такого низкого уровня персонала Windows, как переключатель виртуального рабочего стола.
private void OnKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
bool isThirdKey = //Some state evaluation to detect the third key was pressed
if (isThirdKey) e.Handled = true;
}