Окно нового процесса убрать из фокуса
От: kevkev  
Дата: 24.02.14 15:12
Оценка:
Имеется программа, которая иногда запускает внешнюю консольную утилиту.

Нужно сделать так, чтобы это новое окно не вылезало поверх других окон.

Одно из решений, что пришло в голову ставить создаваемому процессу
::ShowWindow( g_HWND, SW_HIDE );

но здесь нужно знать hwnd нового процесса. Написал такой код для его получения:

EnumWindows(EnumWindowsProcMy,(LPARAM)GetProcessId(pi.hProcess));
.....
BOOL CALLBACK EnumWindowsProcMy(HWND hwnd,LPARAM lParam)
{
DWORD lpdwProcessId;

GetWindowThreadProcessId(hwnd,&lpdwProcessId);

if(lpdwProcessId==lParam)
{
g_HWND=hwnd;
return FALSE;
}
return TRUE;
}

Но тут странность: условие никогда не срабатывает, хотя lParam правильный, именно такой id имеет мой новый процесс в таск менеджере.
Re: Окно нового процесса убрать из фокуса
От: CaptainFlint http://flint-inc.ru/
Дата: 24.02.14 15:48
Оценка: +2
Здравствуйте, kevkev, Вы писали:

K>Имеется программа, которая иногда запускает внешнюю консольную утилиту.


K>Нужно сделать так, чтобы это новое окно не вылезало поверх других окон.


K>Одно из решений, что пришло в голову ставить создаваемому процессу

K>::ShowWindow( g_HWND, SW_HIDE );

Почему бы не воспользоваться параметром STARTUPINFO::wShowWindow в CreateProcess?
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re: Окно нового процесса убрать из фокуса
От: rt_lotus  
Дата: 24.02.14 18:09
Оценка:
Здравствуйте, kevkev, Вы писали:

консольную утилиту. — тогда CREATE_NO_WINDOW
Re: Окно нового процесса убрать из фокуса
От: kero Россия  
Дата: 25.02.14 00:40
Оценка:
Здравствуйте, kevkev, Вы писали:

K>Имеется программа, которая иногда запускает внешнюю консольную утилиту.


сторонняя программа? т.е. нельзя задавать способ запуска утилиты?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re: Окно нового процесса убрать из фокуса
От: visual_wind  
Дата: 25.02.14 09:36
Оценка:
Здравствуйте, kevkev, Вы писали:

K>Имеется программа, которая иногда запускает внешнюю консольную утилиту.


K>Нужно сделать так, чтобы это новое окно не вылезало поверх других окон.


Если вам нужно совсем скрыть окно, а не только убрать с него фокус, то, похоже, что вы не используете в полной мере структуру STARTUPINFO, в которой задаются настройки для запуска дочернего процесса. Вот здесь
Автор: visual_wind
Дата: 03.04.13
можете посмотреть пример для запуска дочернего процесса не только со скрытием его окна, но и с перенеправлением стандартных потоков ввода-вывода в файл.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.