ОК, я понял: воровство фокуса - зло .Или, по крайней мере, это 99,9% времени.Но мне действительно нужно надежно украсть фокус на Windows 8, и до сих пор меня смущает толпа людей, настаивающих на том, что кража фокусов всегда зло.
Сценарий: мы запускаем кастомприложение на обычном ПК под управлением Windows 8.1 (скоро будет Windows 10).Экран, клавиатура и мышь находятся примерно в 5 метрах от земли, вверх по лестнице, на которую оператор погрузчика не должен подниматься.Единственное устройство ввода, которое у них есть, это цифровая клавиатура на удлинительном кабеле на их уровне.Все, что им нужно делать, они могут делать с этой клавиатуры ... до тех пор, пока какая-то злая программа не украла фокус нашего приложения или какой-то удаленный пользователь не вышел из системы и не оставил другое приложение с фокусом.
Приложение по сути является развернутым настольным приложением - оно заполняет экран (но не является строго «полноэкранным» или «верхним» приложением) и, следовательно, позволяет другим приложениям появляться перед ним при необходимости.Но когда мышь бездействует, мы хотим, чтобы это приложение возобновило свое «нормальное» положение перед всеми остальными приложениями, чтобы оно получало фокус, и ввод с цифровой клавиатуры работал надежно.
В Windows 7 с использованием SetForegroundWindow()
(включено с помощью AllowSetForegroundWindow()
работает нормально - приложение можно вернуть на передний план и возобновить фокусировку. В Windows 8 SetForegroundWindow()
приводит только к миганию значка панели задач, но приложение не восстанавливает фокус, заставляя нашего пользователяподниматься по лестнице ... там, где полная клавиатура и мышь слишком заманчивы для того, чтобы они не нажимали кнопки, которые им не следует делать, и обычно возникает хаос.
Так что, пожалуйста, сэр: может ли наше (MFC, настольное) приложениеукрадите фокус, как только мышь на 1 минуту простаивает, потому что это более или менее единственное приложение, которое обычно должно работать в любом случае. Если это разрешено, как мы можем надежно украсть его?