2013-07-04 3 views
1

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

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

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

Есть ли у кого-нибудь какие-либо предложения относительно того, как получить фокус здесь?

+0

Возможно, что-то связано с тем, что IE работает как процесс с низкой целостностью. –

ответ

3

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

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

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

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

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

Не существует процесса переднего плана.

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

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

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

Нет меню.

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

Смежные вопросы