Laufendes Programm beenden



  • EnumWindows(EnumProc, NULL); // benötigt User32.lib
    GetModuleFileNameEx(); // benötigt Kernel32.lib UND WinNT/2K/XP
    


  • Poste doch mal deinen kompletten Code... also wirklich ALLES... nix weglassen!!!

    Aber bitte diesmal richtig in die Code-TAGS eingebunden....

    [ Dieser Beitrag wurde am 22.06.2003 um 22:03 Uhr von Hepi editiert. ]



  • Original erstellt von Gen.d.Pz.Tr.Seb:
    **Tut mir leid aber....

    MITTLERWEILE IST ES MIR VÖLLIG WURSCHT WIE ICH DAS PROGRAMM SCHLIEßE

    es soll wenn geht nicht zu kompliziert sein, und einfach nur funktionieren.**

    Na schön: Klick auf das X oben rechts, oder drücke Alt+F4, wenn das nicht geht, öffne den Tast-Manager und geh auf Prozesse, dann suchst du die Anwendung und drückst auf Prozess beenden. So müsste es gehen! *ggg*



  • Wie war das mit den blöden Kommentaren? Nimm dich mal selber an der Nase, nico!

    -junix



  • // #include "windows.h"
    HWND hwnd;
    hwnd = FindWindow( "notepad", NULL );
    SendMessage( hwnd, WM_CLOSE, 0, 0 );

    Verstanden?? 😉



  • Böser Junix, sagst hier meinen Vornamen *g* Also ich verklag dich gleich -rofl-

    Aber nur mal so, du bist hier derjenige, der zur Zeit am wenigsten über "blödsinnige Kommentare" zu labern hat, denn von dir kommen sie ja in meinen themen, nicht wahr?

    .......Ueli!?



  • In deiner Sig. ist immernoch ne menge falsch. was deinen Vornamen betrifft... so kann ja jeder bei nic.de seine Whois-abfrage starten... (so wie du bei switch... wobei.. ne steht ja auch auf meiner Page...) meine Kommentare sind nicht blöd sonder teils als Rat gemeint und teils in meiner Pflicht als Mod entstanden.

    So aber nu ist auch hier Schluss mit OT.

    -junix



  • Original erstellt von <SlashXP++>:
    **// #include "windows.h"
    HWND hwnd;
    hwnd = FindWindow( "notepad", NULL );
    SendMessage( hwnd, WM_CLOSE, 0, 0 );

    Verstanden?? ;)**

    Ja, aber an der Frage vorbei (und auch noch ohne Code-Tags... Pfui!)!

    Frage war:
    "Ich würde gerne eine laufende .exe Datei beenden. Kann man dies direkt tun oder muss man die thread id herausfinden und diesen dann beenden? (Wie findet man eine thread id heraus?)"

    [ Dieser Beitrag wurde am 23.06.2003 um 15:52 Uhr von Hepi editiert. ]



  • Also mein Code; (entspricht eigentlich fast ganz dem Code von Hepi)

    //lib's sind includiert und funkionsdefinitionen stehen auch alle da,
    //brauch ich nicht zu erwähnen
    
    //Aufruf für Funktion, bei mir wenn ein button gedrückt wird
    
    EnumWindows(EnumProc, NULL);
    
    //Funktionen
    
    BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam)
    {
        //
        // Jetzt haben wir ein HWND irgendeines Fensters
        // Also holen wir uns den Pfad zur zugehörigen EXE
        //
        char Buffer[MAX_PATH];
        char szPfadMitExe[]="c:\Windows\NotePad.exe";
        ZeroMemory(Buffer, sizeof(Buffer)); // Buffer leer machen...
        GetPathFromHandle(hwnd, Buffer);
        if (stricmp(Buffer, szPfadMitExe)==NULL)  
        {
            //
            // _stricmp vergleich 2 strings miteinander
            // wobei es GROSS- und kleinschreibung
            // komplett ignoriert!
            // Oha, es MUSS notepad.exe sein!
            // Also beenden wir es mal...
            //
            SendMessage(hwnd, WM_CLOSE, NULL, NULL);
            return FALSE; // FALSE = EnumWindows kann aufhören
        }
        else return TRUE; // TRUE = weitermachen
    }
    
    void GetPathFromHandle(HWND hWnd, LPTSTR szPathFromHandle)
    {
        //
        // benötigt psapi.lib und psapi.h!!!
        // läuft nur unter NT-basierenden Windows
        // Also WinNT, Win2000, WinXP!
        //
        DWORD lpdwProcessId;
        HANDLE hProcessHandle;
    
        GetWindowThreadProcessId(hWnd, &lpdwProcessId);
        hProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, TRUE, lpdwProcessId);
        GetModuleFileNameEx(hProcessHandle, NULL, szPathFromHandle, MAX_PATH);
        CloseHandle(hProcessHandle);
    }
    

    Fehler sind gleich wie zuletzt geblieben (Lib's SIND eingebunden!)



  • Ist das dein kompletter Quellcode???



  • Was meinst du genau mit kompleter Quellcode? Das gesamte Programm? Ich hab das genommen was du mir gesagt hast. Ich hab ja gesagt das ich diesbezüglich fast nichts kann!



  • Du sollst Dein _komplettes_ Programm hier zeigen...

    Also, angefangen bei der ersten Zeile (vermutlich #include <windows.h> )

    bis hinunter zur letzten schließenden Klammer }



  • Das geht nicht. Ist extrem umfangreich, es handelt sich ja schließlich nicht nur um ein Programm das Programme schließt.



  • Das ist der Moment, wo ich mich ausklinke....

    1.) Ohne Deinen kompletten Quellcode zu kennen vermag ich Deine Fehler nicht zu beheben

    2.) Deine Aussagen "Ich mußte den Quellcode anpassen, damit der BCB ihn schluckt" stimmen mich nachdenklich: Als ich zuletzt mit dem BCB Berührung hatte war es ein Standard-C++ Compiler/Linker, der mit JEDEM Code OHNE ANPASSUNG funktioniert! Das Du dort etwas "anpassen" mußt stimmt mich wirklich nachdenklich!

    Viel Erfolg weiterhin...



  • In dem Fall war die 'Anpassung' das weglassen eines Underscore-Zeichens.

    Vielen Danke für deine bisherige Hilfe, immerhin kann ich jetzt zwar keine Prozesse, aber doch immerhin manche windows schließen


Anmelden zum Antworten