Я создаю приложение с главным окном скрыто, используя следующий код:создать независимый скрытый процесс
STARTUPINFO siStartupInfo;
PROCESS_INFORMATION piProcessInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));
siStartupInfo.cb = sizeof(siStartupInfo);
siStartupInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_FORCEOFFFEEDBACK | STARTF_USESTDHANDLES;
siStartupInfo.wShowWindow = SW_HIDE;
if(CreateProcess(MyApplication, "", 0, 0, FALSE, 0, 0, 0, &siStartupInfo, &piProcessInfo) == FALSE)
{
// blah
return 0;
}
Все работает правильно, кроме моего основного приложения (один вызова этого кода) окно теряет фокус, когда Я открываю новую программу. Я попытался снизить приоритет нового процесса, но проблема с фокусировкой все еще существует.
Есть ли вообще избежать этого? кроме того, есть ли способ создать другой процесс без использования CreateProcess (или любого из API, вызывающих CreateProcess, таких как ShellExecute)?
Я предполагаю, что мое приложение теряет фокус, потому что оно было передано новому процессу, даже когда оно скрыто.
Для тех из вас, кто интересуется, что обязательно спросит обычное «почему вы хотите это сделать», мой ответ заключается в том, что у меня есть сторожевой процесс, который не может быть сервисом, и он запускается всякий раз, когда я открываю свой основной заявление. Доволен?
Спасибо за помощь. Код будет оценен. Джесс.
спасибо. Запущенное приложение работает с наименьшим приоритетом. что еще ты можешь сделать? – Jessica
Не имеет ничего общего с приоритетом. Windows никогда не будет активировать (и, следовательно, фокус) из окна, если другое окно не попытается активировать. Это означает, что все ваши SW_HIDE намеки на обратное - приложение пытается активировать окно верхнего уровня. Добавьте обработчик WM_ACTIVATE в главное окно и точку останова, и окна скажут вам hwnd окна воровства. –
ОК. Мне нужно понять, как записать это конкретное сообщение, но я попытаюсь это выяснить. Вы знаете способ сделать это? – Jessica