was heißt das? wie kann ich das programm beenden?



  • surf. schrieb:

    ...also mit createprocess schließen!!!

    Du willst was?



  • 1.) ich will schauen ob ein exe programm schon ausgeführt wird!

    2.) ich will ein exe programm starten:

    CHAR szCommand[MAX_PATH]= "C:\\new_Downloads\\webserver\\xampp\\apache\\bin\\apache.exe"; 
    
    PROCESS_INFORMATION pi; 
    STARTUPINFO si; 
    ZeroMemory( &si, sizeof(si) ); 
    si.cb = sizeof(si); 
    
    CreateProcess(  NULL, 
                    szCommand, 
                    0, 
                    0, 
                    0, 
                    CREATE_DEFAULT_ERROR_MODE, 
                    NULL, 
                    NULL, 
                    &si, 
                    &pi);
    

    3.) ich will eine bestimmtes exe programm beenden! mit terminate???



  • 1.) FindWindow, EnumWindows oder Process32First & Co.
    3.) http://c-plusplus.net/forum/viewtopic.php?t=39369
    (hWnd bekommst du auch von FindWindow bzw. EnumWinows und Thread- bzw. ProcessID dann über GetWindowThreadProcessId )



  • /****************************************************************************
    Bestimmt das zum übergebenen Prozess-Exectuable gehörende Prozess-Handle
    und gibt es zurück.
    Übergabe
    strProcessExe Prozess-Executable.
    dwDesiredAccess Benötigter Prozess-Zugriff.
    Rückgabe
    Zugehöriges Handle oder NULL im Fehlerfall.
    *****************************************************************************/
    HANDLE GetProcessHandle( CString strProcessExe, DWORD dwDesiredAccess )
    {
     HANDLE hSnapShot; // System-Snap-Shot-Handle
     PROCESSENTRY32 PEntry; // Process-Enumerations-Struktur
     HANDLE hProcess; // Prozess-Handle
     CString strExeFile; // Hilfssstring
     BOOL bOK; // Abbruch-Flag
     // Liste aller im System laufenden Prozesse erstellen
     hSnapShot=::CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
     if( hSnapShot==INVALID_HANDLE_VALUE )
     // Fehler aufgetreten
     return NULL;
     // Prozess-Executable in Kleinbuchstaben wandeln
     strProcessExe.MakeLower( );
     // Prozess-Liste durchlaufen
     PEntry.dwSize=sizeof( PEntry );
     bOK=::Process32First( hSnapShot, &PEntry );
     for( ; bOK; bOK=::Process32Next( hSnapShot, &PEntry )){
    
     // Pozess-ID in Handle umwandeln
     hProcess=::OpenProcess( dwDesiredAccess, FALSE, PEntry.th32ProcessID );
     if( hProcess==NULL )
     // Umwandlung misslungen
     continue;
     // Prozess-Executable in Kleinbuchstaben wandeln und prüfen
     strExeFile=PEntry.szExeFile;
     strExeFile.MakeLower( );
     if( strExeFile.Find( strProcessExe )!=-1 )
     // Passenden Prozess gefunden, Handle zurückgeben
     return hProcess;
     }
     // Nichts Passendes gefunden
     return NULL;
     }
    
    //Damit kannst Du mit
    
    TerminateProcess( GetProcessHandle( "test.exe", PROCESS_TERMINATE ), 0 );
    
    /*einen laufenden Prozess "test.exe" beenden. Das gelingt aber nur, wenn 
    der ausführende 
    Benutzer auch die entsprechenden Rechte besitzt. GetProcessHandle( ... ) kehrt bei fehlenden 
    Rechten der einem anderen Fehler mit NULL zurück. Des Weiteren musst Du darauf achten, bei 
    der Executable keinen Pfad anzugeben.*/
    

    bitte mal testen!!!!!!!!!!!!



  • ich weiß net wies fenster heißt sondern sehe in der taskleiste nur apache.exe
    was machs i dann processterminate so wie oben?????
    bitte das oberige mal testen und mir sagen obs funzt!!!
    danke.

    lg surf.



  • TerminateProcess ist aber bissl sehr radikal! Wie du es besser machen kannst: siehe mein oben stehender Link



  • 1. problem: das ist ein dos fenster....
    2. problem: ich weiß net wies fenster heißt sondern sehe in der taskleiste nur apache.exe

    hast du das obrige mit terminateprozess getestet?

    lg



  • Schau doch mal mit Spy++ o.ä. nach, wie das Fenster heißt (normalerweise das, was in der Titelleiste steht)
    Zum Testen hab ich jetzt keine Lust und Zeit mehr - morgen ganz vielleicht 🙄



  • kennst du apache server???? apache.exe ist das ich beenden möchte!!!

    wenn ich das starte manuell öffnet sich ein fenster:
    C:\WINDOWS\System32\cmd.exe
    das ist ein dos fenster!!!

    ich glaub net das das mit spy++ geht oder wie da heißt!!!!

    ich sehe in der taskleiste ja apache.exe
    hab mir gedacht mit processterminate mit meinem beispiel....ka ahnung ob das geht???? bitte mal testen und mir sagen
    das zu beenden!

    was meinst du???

    lg flasher!



  • im taskmanager unter prozesse sehe ich
    apache.exe
    wollt ich sagen!


Anmelden zum Antworten