Warten bis Programm beendet



  • Hi, ich rufe ein Programm aus meinem Programm auf und möchte wissen wann es beendet wird.

    ShellExecute( NULL, "open", csProgramm, csParameter, NULL, SW_HIDE );
    

    Wie kann ich darauf warten bis es beendet ist?
    Geht das mit WaitForSingleObject?
    Und wenn ja wie? Könnt Ihr mir ein Beispiel geben und erklären?

    Grüße
    Filou



  • Meine Überlegungen: Nimm ShellExecuteEx, danach kannst du den als hProcess zurückgegebenen Prozess-Handle z.B. an WaitForSingleObject weitergeben.



  • Danke für Deine Antwort!

    Kannst Du mir ein Beispiel geben? Wie geht das mit dieser Stuktur?
    So nicht jedenfalls nicht:

    typedef struct _SHELLEXECUTEINFO
    		{
        DWORD cbSize;
        ULONG fMask;
        HWND hwnd = *handle;
        LPCTSTR lpVerb;
        LPCTSTR lpFile = open;
        LPCTSTR lpParameters;
        LPCTSTR lpDirectory = "C:\\Test.exe";
        int nShow = SW_HIDE;
        HINSTANCE hInstApp;
        LPVOID lpIDList;
        LPCTSTR lpClass;
        HKEY hkeyClass;
        DWORD dwHotKey;
        union {
            HANDLE hIcon;
            HANDLE hMonitor;
        } DUMMYUNIONNAME;
        HANDLE hProcess;
    	} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;
    
    	ShellExecuteEx(_SHELLEXECUTEINFO);
    	while (bCheck == TRUE)
    		{
    		dWait = WaitForSingleObject(*handle, 1000);
    		if (dWait == WAIT_ABANDONED)
    			{
    			bCheck = FALSE;
    			}
    		Sleep(2000);
    		}
    


  • OMG beschäftige dich erstmal mit den Grundlagen.



  • Du mußt diese Struktur nicht nochmal neu definieren, sondern nur verwenden:

    SHELLEXECUTEINFO info;
    //hier alle nötigen Parameter und Zusatzangaben einfügen
    if(ShellExecuteEx(info)&&info.hProcess!=NULL)
    {
      WaitForSingleObject(info.hProcess,...);
    }
    


  • dies ware auch eine möglichkeit

    //Processinformationen zum zerstöhren der Anwendung
    PROCESS_INFORMATION pInfo; 
    ZeroMemory(&pInfo,sizeof(pInfo));
    
    CreateProcess(0,"C:\\Deine.exe",0,0,TRUE,
              NORMAL_PRIORITY_CLASS,0,0,NULL,&pInfo);
    


  • LowFly du hast vergessen STARTUPINFO anzugeben.


Anmelden zum Antworten