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;
    }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage