Wie man hWnd des Fensters geöffnet von ShellExecuteEx.. hProcess?
Diesem "einfachen" Problem scheint zu sein, behaftet mit Seiteneffekten.
zB. Hat der neue Prozess mehrere Fenster öffnen; gibt es einen splash-screen?
Gibt es eine einfache Möglichkeit? (Ich fange eine neue Instanz von Notepad++)
...
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?
}
...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten Verwendung
WaitForInputIdle
zu unterbrechen Ihr Programm, bis die Anwendung gestartet wurde, und wartet auf Benutzereingaben (das main-Fenster sollte erstellt worden sein dann), dann verwenden SieEnumWindows
undGetWindowThreadProcessId
zu ermitteln, welche windows in das system gehören zu den erstellten Prozess.Beispiel:
SEE_MASK_NOCLOSEPROCESS
FlaggeWaitForInputIdle
tun nicht, was Sie denken, es tut. Siehe WaitForInputIdle sollte wirklich genannt werden WaitForProcessStartupComplete und WaitForInputIdle wartet, bis alle Threads, die möglicherweise nicht der Faden, den Sie über Pflege. WinEvents statt zu-monitor-Fenster Schöpfung.