Рэймонд написал в блогео том, как программы могут получить/украсть «любовь переднего плана» с помощью RegisterHotkey
, которая при вызове перенесет приоритет переднего плана в ваше приложение.
Попытки сделать это вручную терпят неудачу (например, с помощью SetForegroundWindow
, SwitchToWindow
и т. д.), потому что приложения не должны иметь возможность украсть фокус у пользователя (чтобы нажатия клавиш не лезь не туда).
Проблема в том, что сегодня я заметил нечто странное:
Я пытаюсь безопасно удалить внешний диск.
Пауза ~7 секунд.
Во время паузыя энергично печатаю в окне.
Внезапно окно сообщения крадетпередний план из моего приложения, и вместо этого я печатаю текст в окне сообщения.
Ясно, что здесь не используется механизм горячих клавиш, и тем не менее Windows смогла украсть фокус у моего приложения.
Я действительно сомневаюсь, что есть что-то вроде «черного хода», используемого только для этой конкретной цели (хотя, пожалуйста, поправьте меня, если я ошибаюсь), так что, предполагая, что это не так, должен быть способ сделать это правильно, безиспользования механизма горячих клавиш.
Итак, вопрос в том, как это достигается?
Ханс отметил, что "бэкдор" — это AttachInputThread
, но я не очень уверен, что здесь происходит именно это, тем более что Рэймонд говорит, что этот метод может вызывать зависания. Идеи?