HANDLE in HWND umwandeln ??



  • Bist du denn jetzt weitergekommen mit deinem Problem?



  • Ja WebFritzi,

    deine Funktionen funktionieren einwandfrei 🙂 , aber ich hätte doch gern noch gewusst, wie ich das selber in meinen Code einbauen kann. 😃



  • Schau in meinen Code rein. Viel ist es ja nicht.



  • tsp schrieb:

    Ich habe zu Testzwecken notepad.exe beendet. Danach war trotzdem noch notepad.exe im task-Manager zu sehen, ...

    Passiert das ständig, öfters oder ganz selten, bzw. nur bei notepad.exe oder auch bei anderen Prozessen ?



  • @tsp: Du hast meinen Post aber bemerkt oder *grinz* ?



  • @merker:

    Es passiert ständig bei jedem Prozess!



  • tsp schrieb:

    Es passiert ständig bei jedem Prozess!

    Poste nochmal die Schleife in der Du TerminateProcess () aufrufst.

    Im Augenblick sorgst Du für eine mittelschwere Sensation :
    TerminateProcess () erzeugt "Zombies" ?!?

    //EDIT : Nachtrag hinzugefügt



  • Hier noch mal die Loop:

    int isRun(string file)
    {
        HANDLE hSnapShot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0);
    
        PROCESSENTRY32 processInfo; processInfo.dwSize = sizeof (processInfo);
    
        /*PROCESSENTRY32* processInfo = new PROCESSENTRY32;
        processInfo->dwSize = sizeof ( PROCESSENTRY32);*/
    
        while ( Process32Next ( hSnapShot,&processInfo ) != FALSE)
        {
           if (strcmpi(processInfo.szExeFile,file.c_str())==0)return rocessInfo.th32ProcessID;
        };
    
        CloseHandle ( hSnapShot);
    
        //delete processInfo;
        return 0;
    }
    
    void lock(string file)
    {
        while (true)
        {
            Sleep(5);
            int i=isRun(file);
            if (i!=0)
            {
                TerminateAppByWindowClosing(i, 0);
                //HANDLE h=OpenProcess(PROCESS_ALL_ACCESS,FALSE,i);
                //TerminateProcess(h,12);
                //CloseHandle(h);
            }
        }
    }
    
    int main()
    {
        while (true)
        {
            Sleep(5);
            int i=isRun("notepad.exe");
            if (i!=0)
            {            
                HANDLE h=OpenProcess(PROCESS_ALL_ACCESS,FALSE,i);
                TerminateProcess(h,12);
                CloseHandle(h);
            }
        }
        return 0;
    }
    

    Bitteschön.



  • Die Loop ist ok.
    Wie hoch ist die Aktualisierungsgeschwindigkeit vom Taskmanager ?



  • Keine Ahnung, ich schätze mal so 10-100 ms.



  • Wird langsam unheimlich die Sache. Funktioniert die "hardcoded" Variante von TerminateProcess () ohne Loop?
    Falls nicht, was liefert GetLastError () zurück ?

    // notepad starten, pid dem taskmanager entnehmen und eintragen, kompilieren und starten
    
     DWORD  pid  = 1234;
    
     HANDLE h    = 
     OpenProcess      (PROCESS_ALL_ACCESS,FALSE,pid);
    
     TerminateProcess (h,1);
    
     DWORD error = 
     GetLastError     ();  
    
     CloseHandle      (h);
    


  • Der Code funktioniert!!!!! 😮 😮
    Mich laust der Affe.

    Ich versuch mal, den Unterschied zwischen deinem und meinem zu finden ( ➡ kann ja nich so schwer sein!?)



  • Hey, also ... ich weiß nich ... jetzt funktioniert meine loop, aber ich hab nix verändert!! 😮 😮

    Danke für deine umfangreiche Hilfe merker! 😃

    PS: Wenn du noch was interessantes hast, dann post es .



  • tsp schrieb:

    Wenn du noch was interessantes hast, dann post es.

    Sobald Du "Prozessstrukturen", d.h. einen Parent- und seine Childprozesse beenden willst, wird es wieder interessant.

    Aber das wäre ein neues Thema. 🙂


Anmelden zum Antworten