Questa "semplice" questione sembra essere irta di problemi collaterali.
es. Il nuovo processo apre più finestre; Ha uno splash screen?
C'è un modo semplice? (Sto iniziando una nuova istanza di Notepad ++)Come ottenere hWnd della finestra aperta da 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?
}
...
Grazie Jon ... così breve intervallo di polling è la strada da percorrere ... che abbia un senso :) –
sto lavorando attraverso il vostro esempio ora ... e PS al mio commento precedente: ho appena notato in MSDN: WaitForInputIdle può essere utilizzato in qualsiasi momento, non solo durante l'avvio dell'applicazione. Tuttavia, WaitForInputIdle attende solo una volta che un processo diventi inattivo; le successive chiamate WaitForInputIdle ritornano immediatamente, indipendentemente dal fatto che il processo sia inattivo o occupato. * Sembra che il sondaggio non sia una buona idea ... Farò qualche test. –
È necessario utilizzare WaitForInputIdle solo al momento della creazione del processo. Da quel momento in poi, basta interrogare la chiamata EnumWindows per ottenere l'elenco delle finestre aggiornate. –