Как я могу предотвратить кражу фокуса в Windows? - PullRequest
18 голосов
/ 12 мая 2010

Быстрый поиск в Google решений для Focus Stealing в Windows выявляет две основные категории результатов:

  • Люди, предлагающие неполные решения с участием Запись реестра ForegroundLockTimeout (или TweakUI, который, я считаю, просто изменяет вышеупомянутую запись реестра), что не очень эффективно.
  • Непрерывно полчища пользователей Windows жалоб о это .

Это особенно раздражает в двух распространенных сценариях:

  • Что-то вызывает запуск программы всплывающего диалогового окна в фоновом режиме, когда полноэкранное приложение сфокусировано, в результате чего полноэкранное приложение минимизируется.

  • Окно крадет фокус, пока вы печатаете, крадя все ваши нажатия клавиш. Если вы случайно нажмете «Пробел», «Ввод» или вызовете сочетание клавиш (например, Y для «Да»), это может привести к совершенно нежелательным последствиям.

Какие творческие решения могут быть применены для решения этой проблемы для одного или обоих этих сценариев?

1 Ответ

2 голосов
/ 12 октября 2011

У меня есть одно предложение относительно того, как это можно решить, но я не могу реализовать его полностью, так как мне не хватает знаний.

Изменение фокуса между окнами должно вызываться вызывающей программой, вызывающей функцию API Windows, расположенную, скорее всего, в shell32 или user32. Некоторые программы, такие как Adobe Photoshop, звонят несколько раз (по крайней мере, дважды), чтобы заставить себя при запуске. Идея состоит в том, чтобы подключиться к этой функции API (если это возможно) и проверить, откуда происходит вызов. Если это не из explorer.exe (т. Е. Alt + вкладка или щелчок значка на панели задач), вызов должен быть заблокирован указанным перехватчиком.

...