WaitForInputIdle funktioniert nicht zum programmgesteuerten Starten von mspaint
Ich versuche "mspaint" zu öffnen und finde das Handle gleich nachdem es initialisiert wurde. AberFindWindow
kehrt zurückNULL
wenn ich @ anruWaitForInputIdle
. Wenn ich versuche die Funktion @ zu benutzSleep(1000)
Es klappt. Aber ich denke nicht, dass es der richtige Weg ist, darauf zu warten, dass das Programm fertig ist. Gibt es eine Lösung für diesen Code?
CString strWindowDirectory;
GetSystemDirectory(strWindowDirectory.GetBuffer(MAX_PATH), MAX_PATH);
SHELLEXECUTEINFO sei = { 0 };
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = L"open";
sei.lpFile = L"mspaint";
sei.lpDirectory = strWindowDirectory;
sei.nShow = SW_SHOWNORMAL;
HWND hPaint = NULL;
if(ShellExecuteEx(&sei))
{
int r = ::WaitForInputIdle(sei.hProcess, INFINITE);
ATLTRACE(L"WaitForInputIdle %d\n", r);
if (sei.hProcess == NULL) return;
hPaint = ::FindWindow(L"MSPaintApp", NULL);
ATLTRACE(L"Handle %d\n", hPaint);
if (!hPaint) return;
}
else
{
MessageBox(L"Couldn't find mspaint program");
return;
}