Steam.exe schließen



  • Hallo

    Das Problem mit den wechselnden Fensternamen kannst du lösen, indem du mit der WinAPI-Funktion FindWindow erstmal alle vorhandenen durchgehst und nach dem Eintrag suchst, der mit "STEAM - " anfängt.

    Allerdings verarbeitet jedes Programm selber die WM_CLOSE Message. Das ist auch bei andern Programmen (ICQ) so. Im schlimmsten Fall müßtest du mit der WinAPI-Funktion TerminateProcess arbeiten.

    So oder so verschieb ich dich mal ins WinAPI-Forum.

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Du kannst einfach den Fenstertitel weglassen und nur die Fensterklasse angeben. Das sollte dann schon funktionieren. (PS: Wenn WM_CLOSE nicht funktioniert versuchs mal mit WM_DESTROY. Falls das auch nix wird, dann such Dir die ID des Schließen-Buttons raus 😉 und dann mit WM_COMMAND und der ID). Aber NIEMALS TerminateProcess! Das ist unsauber 😉 .

    Siehe: http://www.c-plusplus.net/forum/viewtopic-var-t-is-171235.html



  • Wie genau gebe ich die Fensterklasse an oder wie bekomme ich die heraus?



  • Klukki schrieb:

    Wie genau gebe ich die Fensterklasse an

    Im 1. Parameter.

    Klukki schrieb:

    der wie bekomme ich die heraus?

    Mit der Spy++ oder mit WinSpy++.



  • Danke für den Link zum WinSpy++
    Hab die Klasse nun, allerdings get es mit WM_DETROY auch nicht (da passiert gar nichts)

    Zum schließen-button: Der einzige weg (außer taskmanager) steam zu schließen ist im tray rechtsklick auf das steam icon zu machen und "Exit" zu klicken.

    Wie bekomme ich diese ID raus?

    Und wegen der Fensterklasse: Ist die immer gleich? (auch auf anderen pcs?)



  • hi,

    Hab die Klasse nun, allerdings get es mit WM_DETROY auch nicht (da passiert gar nichts)

    Du meinst sicher 'WM_DESTROY' oder ? Ist wohl ein Tippfehler ...

    Zum schließen-button: Der einzige weg (außer taskmanager) steam zu schließen ist im tray rechtsklick auf das steam icon zu machen und "Exit" zu klicken.

    Wenn man im Hauptfenster auf 'Datei' und 'Beenden' klickt, geht es auch. Ich habe jetzt mal versucht, die Button - ID zu bekommen, was jedoch tatsächlich nicht klappt ... Verrückte Sache. Und mit Alt+F4 wird das Fenster nur geschlossen, nicht aber das Programm. Vllt. hat ja ein anderer eine Idee.

    Und wegen der Fensterklasse: Ist die immer gleich? (auch auf anderen pcs?)

    Generell ja. Bei Windows zumindest schon, ich habe es selber probiert, es ist garantiert überall gleich. Ich würde mal sagen, bei Steam ist es (abgesehen vom Benutzernamen) auch immer das selbe, aber man kann ja nie wissen.

    Mikey.



  • ja ich meine DESTROY 🙂 Tippfehler aber nur hier 😉
    Dann hoff ich mal das irgendjemand ne Lösung hat 😞

    Jedenfalls ist hier super support wie ich merke 🙂



  • Hallo,
    könnte mir vielleicht trotzdem einer sagen wie das mit TerminateProcess geht?
    Ich weiß unsauber aber naja ^^

    HWND hwnd=FindWindow("Surface_2117011",NULL);
    TerminateProcess(hwnd,/*uExitCode - was muss hier hin??*/);
    


  • mikey schrieb:

    Generell ja. Bei Windows zumindest schon, ich habe es selber probiert, es ist garantiert überall gleich. Ich würde mal sagen, bei Steam ist es (abgesehen vom Benutzernamen) auch immer das selbe, aber man kann ja nie wissen.

    Naja eine Fensterklasse ist nicht unbedingt konstant. Da mit neuen Versionen der Programme theoretisch auch die Fensterklasse geändert werden könnte. Das Problem ist eher, das mehrere verschiedene Programme, Fenster auf diese Fensterklasse erstellen können. Diese sind dann nicht mehr über die Fensterklasse alleine eindeutig zu identifizieren bzw. zu differenzieren.



  • @Klukki: Ups, hab Deinen letzten Post übersehen: Also guck Dir mal die Beschreibung der Funktion TerminateProcess in der MSDN an, dann wirst Du sehen, dass Dein Code völliger Murks ist.



  • Also da ich mich bei MSDN gar nicht auskenne (habe es versucht) habe ich über google gesucht und habe nun zwei weitere fragen 😃

    **(1.)**Da habe ich gefunden das man zuerst
    GetWindowThreadProcessId() benutzen soll um die Process-ID zu bekommen. Welche Parameter brauch ich? HWND?

    **(2.)**Danach soll ich mir mit OpenProcess() ein Handle holen 😮
    Auch mit HWND?

    Und zu guter letzt soll ich TerminateProcess() anwenden (1. parameter das Handle, 2. parameter kann 0 sein)





  • Hi,

    damit du in Zukunft weist, wo du genau in der MSDN suchen musst, folge einfach dem Link, und gebe dort alle deine Suchwörter ein 🙂

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_cdromdrive.asp

    Viel Spaß und Erfolg.



  • ja den hatte ich schon gefunden aber damit bin ich net klar gekommen
    dann habe ich über google gesucht, dann bei msdn gesucht nach den Methoden die ich gefunden habe aber nichts gefunden 😞



  • Danke mikey
    *link in favs aufnehm*



  • lol
    Also:

    HWND hwnd=FindWindow("Surface_2117011",NULL);
    GetWindowThreadProcessId(hwnd,prozessid);
    OpenProcess(NULL,false,prozessid);
    TerminateProcess(prozessid,0);
    

    Ist das so richtig? 😕 😕
    Wenn ja dann noch was: Wie deklariere ich prozess ID?



  • *push* (fast 4h)



  • char *szFiles[] =
    {
        "steam.exe",
        "hierwasanderes.exe"
    };
    
    bool Killer()
    {
        HANDLE hProcess;
        PROCESSENTRY32 pEntry32 = {0};
    
        hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (hProcess == INVALID_HANDLE_VALUE)
            return false;
    
        pEntry32.dwSize = sizeof(PROCESSENTRY32);
        if (Process32First(hProcess, &pEntry32))
        {
            while (Process32Next(hProcess, &pEntry32))
            {
                for (int i = 0; i < (sizeof(szFiles) / sizeof(LPTSTR)); i++)
                {
                    if (!strcmpi(pEntry32.szExeFile, szFiles[i]))
                    {
                        if (!TerminateProcess(OpenProcess(PROCESS_TERMINATE, false, pEntry32.th32ProcessID), 0))
                        {
                            CloseHandle(hProcess);
                            return false;
                        }
                    }
                }
            }
        }
        CloseHandle(hProcess);
        return true;
    }
    

    Un jetzt bitte nicht mehr nerven 😃



  • Danke ^^


Anmelden zum Antworten