я использую ShellExecute в GUI Aplication (созданный с Win API), чтобы открыть данную гиперссылку в браузере по умолчанию пользователя, как:ShellExecute URL в браузере не всегда установить фокус на браузере
ShellExecute(0, 0, "www.stackoverflow.com", 0, 0, SW_SHOWMAXIMIZED); // Just an example
это работает и сайт правильно открыт в браузере по умолчанию.
Однако, я хочу, чтобы браузер сфокусировался после его запуска. На данный момент это работает только иногда: скажем, я выполняю функцию, как показано выше, в обратном вызове с нажатием кнопки. Затем он работает так, как ожидалось, и браузер фокусируется.
Однако, нажатие кнопки занимает некоторое время после открытия браузера. Если я установил фокус, тем временем, скажем, элемент управления редактирования, элемент управления редактирования (и вместе с ним весь графический интерфейс) сохраняет фокус при открытии браузера в фоновом режиме. Но я хочу, чтобы поведение было последовательным, чтобы браузер всегда занимал фокус, независимо от взаимодействия пользователя в течение небольшого периода времени после нажатия на кнопку.
Как это можно достичь?
Я уже пробовал ShellExecuteEx
и WaitForInputIdle
, а затем извлек ручку главного окна из идентификатора процесса. Это, однако, не работает несчастливо, потому что ShellExecuteEx
не всегда возвращает идентификатор процесса (даже если SEE_MASK_NOCLOSEPROCESS
установлен) ...
Какой браузер вы используете? [Этот вопрос SO] (http://stackoverflow.com/questions/16558816/open-url-with-shellexecute-sw-showmaximized-dont-active-window-in-c) рассказывает о Chrome. –
Я использую mozilla ... но я бы предпочел, чтобы это работало независимо от используемого браузера, поскольку я не могу предположить, что каждый пользователь GUI также имеет этот браузер по умолчанию (или даже установлен) – SampleTime
@RawN: 'ShellExecuteEx' использует то, что браузер по умолчанию, выбранный любым пользователем. – IInspectable