Эта «простая» проблема, похоже, чревата побочными проблемами.
например. Открывает ли новый процесс несколько окон; Есть ли заставка?
Есть ли простой способ? (Я начинаю новый экземпляр Notepad ++)Как получить hWnd окна, открытого ShellExecuteEx .. hProcess?
...
std::tstring tstrNotepad_exe = tstrProgramFiles + _T("\\Notepad++\\notepad++.exe");
SHELLEXECUTEINFO SEI={0};
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.hwnd = hWndMe; // This app's window handle
sei.lpVerb = _T("open");
sei.lpFile = tstrNotepad_exe.c_str();
sei.lpParameters = _T(" -multiInst -noPlugins -nosession -notabbar ";
sei.lpDirectory = NULL;
sei.nShow = SW_SHOW;
sei.hInstApp = NULL;
if(ShellExecuteEx(&sei))
{ // I have sei.hProcess, but how best to utilize it from here?
}
...
Спасибо Джон ... Так короткий интервал опроса является путь ... что имеет смысл :) –
я теперь работает через ваш пример ... и PS к моему предыдущему комментарию: я только что заметил в MSDN: WaitForInputIdle можно использовать в любое время, а не только во время запуска приложения. Однако WaitForInputIdle ждет только один раз, когда процесс станет бездействующим; последующие вызовы WaitForInputIdle немедленно возвращаются, независимо от того, является ли процесс незанятым или занятым. * Кажется, опрос - не очень хорошая идея ... Я сделаю несколько тестов. –
При создании процесса вам нужно использовать WaitForInputIdle. С этого момента просто опросите вызов EnumWindows, чтобы получить обновленный список окон. –