Я создал дочерний процесс из консольного приложенияДетский процесс крадет фокус. Как вернуть его, не беспокоя пользователя?
CreateProcess(NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &in, &out);
Где
command
является командной строки для приложения я бегуpvw32 img.jpg
(pictView, чтобы показать некоторые изображения).in
является STARTUPINFO структура (я пытался STARTF_USESHOWWINDOW флаг, но вот незадача, pictView крадет фокус некоторые из его ПРОЦЕССОВ)
Я попытался дать pictView некоторое время, а затем любезно принять фокус назад
Sleep(1000);
SwitchToThisWindow(hwnd,TRUE);
Я получил фокус (курсор снова мигает в моей консоли), но значок на панели задач несколько раз мигает, и вход не разрешен, пока я не нажму Alt + Tab.
Я также попытался установить z-порядок, чтобы сфотографировать pictView, даже чтобы приостановить его, но он просто не хочет легко сдаваться. Единственный способ вернуть фокус - убить pictView.
Есть ли способ вернуть фокус, не беспокоя пользователя с помощью Alt + Tab?
Примечание: не было проблем с фокусом-кражей с simpView, но я бы хотел остаться с pictView по соображениям производительности.
Вы можете попробовать установить STARTUPINFO.wShowWindow в SW_SHOWNOACTIVATE. Однако это лишь намек на процесс, он не должен его использовать. –
Помимо использования флага 'STARTF_USESHOWWINDOW', вы также установили значение' wShowWindow' структуры 'STARTUPINFO' в нечто вроде' SW_SHOWNOACTIVATE' или 'SW_SHOWMINNOACTIVATE'? –
Да, я попробовал, но pictView просто игнорирует его. Мне интересно, может ли быть способ запустить pictView в какой-то песочнице, которая учит его процессу хороших манер? –