Эмуляция клавиш alt-tab приводит к зависанию меню на экране

Мне нужно сделать пользовательскую горячую клавишу для функции alt-tab. Я делаю это с SendInput, отправляя соответствующие ключи, и все работает нормально.

Однако, если горячая клавиша уже включает клавишу alt, программе нужно только нажать и отпустить вкладку; но это приводит к тому, что меню Alt-Tab даже застревает на экране, и единственный способ заставить его уйти - закрыть мою программу. Как такое могло произойти и какое отношение закрытие моей программы имеет к исчезновению меню?

С другой стороны, отправка клавиш (alt down)(tab down)(tab up)(alt up) независимо от того, нажата ли уже клавиша alt, работает во всех случаях, но я не могу полагаться на это поведение по другим причинам.

Я использую WinXP, если это поможет, я еще не пробовал на компьютере с Win7.


person riv    schedule 28.12.2013    source источник
comment
Это хлопотно, состояние клавиатуры является свойством для каждого процесса, и вы не можете узнать, какое состояние клавиатуры для любого процесса, которому принадлежит окно переднего плана. Он не будет соответствовать вашему. Так что вы, вероятно, делаете что-то не так, мы не можем этого видеть.   -  person Hans Passant    schedule 29.12.2013
comment
Но как это приводит к тому, что окно Alt-Tab застревает на экране? Я проверил, что все, что делает моя программа, это отправка ввода (вкладка вниз) (вкладка вверх). Что еще более странно, почему закрытие программы приводит к ее исчезновению?   -  person riv    schedule 29.12.2013
comment
Почему бы вам просто не использовать полный набор нажатий клавиш? Вы сказали, что это работает во всех случаях. Каковы другие причины?   -  person manuell    schedule 29.12.2013


Ответы (2)


Была аналогичная проблема, вызванная выполнением PostMessage WM_KEYDOWN, VK_TAB в событии, вызванном нажатием оператором ALT-N для отмены действия. Таким образом, когда вкладка была отправлена, клавиша ALT все еще была нажата. Поскольку наш код никогда не отправляет WM_KEYUP, он, должно быть, сбил с толку Win XP. Оставил меню alt-tab на экране до выхода из приложения.

person user3386028    schedule 06.03.2014

Я не знаю, связано ли это, но Alt+Ctrl+Tab приводит к зависанию меню, точно так же, как если бы Alt зависал при нажатии Alt+Tab. Так что, возможно, вы каким-то образом отправляете сигнал Ctrl.

person klm123    schedule 07.02.2017