У меня есть приложение, которое по сути является «вспомогательным» приложением, которое упаковывает другое приложение.
Приложение, с которым взаимодействует пользователь, представляет собой процесс, который создается приложением-помощником так:
PROCESS_INFORMATION processInfo;
STARTUPINFO startupInfo;
memset(&processInfo, 0, sizeof(processInfo));
memset(&startupInfo, 0, sizeof(startupInfo));
startupInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startupInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
startupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
startupInfo.dwFlags = STARTF_USESTDHANDLES;
startupInfo.cb = sizeof(startupInfo);
int retval = CreateProcess(cmd, cmdLine, NULL, NULL, false,
CREATE_NO_WINDOW, NULL, NULL, &startupInfo,
&processInfo);
Этот процесс является исполняемым файлом, к которому у меня нет исходного кода, и я не могу вносить в него изменения.
Приложение-помощник делает несколько вещей, основанных в основном на сетевом трафике из другого приложения. В какой-то момент я хочу отобразить диалоговое окно просмотра файлов из вспомогательного приложения на основе того, что пользователь делает в запущенном процессе пользовательского интерфейса.
Когда я показываю диалог файла из вспомогательного приложения, он отображается за пользовательским интерфейсом созданного процесса, что не идеально. Я попытался вызвать SetForegroundWindow () из вспомогательного приложения, но оно не соответствует критериям, указанным для SetForegroundWindow в документах MSDN (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633539%28v=vs.85%29.aspx), а именно:
Процесс не является приоритетным процессом.
Процесс не был запущен процессом переднего плана.
(хотя процесс создал процесс переднего плана).
Есть ли способ вызвать CreateProcess () с флагом или параметром, который работает как вызов AllowSetForegroundWindow () из этого процесса? Или флаг, который можно использовать, чтобы заставить Windows думать, что запущенный процесс «совпадает» с процессом, который запустил его в целях разрешений SetForegroundWindow?
Или есть другой способ показать диалог, созданный вспомогательным приложением, поверх диалогов созданного процесса?