WinApi: дать клавиатуру фокус на новое окно в новой теме

У меня есть DLL, которая вызывается плагином браузера, когда пользователь нажимает кнопку на веб-странице. Эта dll содержит собственный код, который создает окно (в новом потоке пользовательского интерфейса), и мне нужно это окно, чтобы сосредоточиться на клавиатуре при его создании (поведение, ожидаемое пользователем). Я не пытаюсь подсунуть нежелательное всплывающее окно в лицо пользователя.

Я пытался использовать SetForegroundWindow (), SetFocus (), BringWindowToTop (), AttachThreadInput (), сворачивая / восстанавливая окно, вы называете его, я пробовал. Наибольший прогресс, который я достиг, — это заставить новое окно мигать на панели задач.

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

Кто-нибудь есть какие-либо предложения о том, как получить фокус клавиатуры здесь?

1

Решение

Если на панели задач мигает окно, значит, ваш код не соответствует требованиям, изложенным в SetForegroundWindow() документация:

Процесс может установить окно переднего плана, только если один из следующих
условия верны:

Процесс — это процесс переднего плана.

Процесс был начат процессом переднего плана.

Процесс получил последнее входное событие.

Там нет переднего плана процесса.

Процесс переднего плана отлаживается.

Передний план не заблокирован (см. LockSetForegroundWindow).

Истекло время ожидания блокировки переднего плана (см. SPI_GETFOREGROUNDLOCKTIMEOUT в SystemParametersInfo).

Нет активных меню.

Приложение не может заставить окно на передний план
пока пользователь работает с другим окном. Вместо этого Windows
мигает кнопка панели задач окна, чтобы уведомить пользователя.

3

Другие решения

Других решений пока нет …