Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Befehl um Prozess zu beenden??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 <
020
01.09.2004, 19:00 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
also dann probier mal folgendes:

C++:
#include <windows.h>
#include <tlhelp32.h>


typedef BOOL(__stdcall *THFUNC)(HANDLE,LPPROCESSENTRY32);


void stop(){

DWORD dw;
HANDLE hSysSnapshot = NULL;
HANDLE h_pro;
PROCESSENTRY32 proc;
THFUNC pProcess32First=(THFUNC)GetProcAddress(GetModuleHandle("kernel32.dll"),"Process32First");
THFUNC pProcess32Next=(THFUNC)GetProcAddress(GetModuleHandle("kernel32.dll"),"Process32Next");
if(pProcess32First&&pProcess32Next)
    {
        proc.dwSize = sizeof(proc);
        hSysSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 );
        pProcess32First(hSysSnapshot,&proc);
        proc.dwSize = sizeof(proc);


        do{
            if(!strcmp(proc.szExeFile,"notepad.exe")){//oder halt th32ProcessID verwenden
                  h_pro=OpenProcess(PROCESS_ALL_ACCESS, TRUE, proc.th32ProcessID);
                  GetExitCodeProcess(h_pro,&dw);
                  TerminateProcess(h_pro,dw);
            }
        }while(pProcess32Next(hSysSnapshot,&proc));
    }
}

//---------------------------------------------------------------------------------

int main()
{
stop();
return 0;
}





Beachte dass du jetzt nicht mehr Process32First/Next direkt aufrust sondern dass es sich bei pProcess32First/Next um Funktionszeiger handelt die mit der Funktionsadresse der Funktionen in der Dll initialisiert werden.
Mit der Version bist du fast wieder bei deinem anfänglichem Beispiel,nur mit dem "kleinen" Unterschied dass die Zeiger jetzt sinnvolle Werte enthalten und dass es einen Grund gibt die Funktionen indirekt aufzurufen(DEV-CPP löst die Referenzen nicht auf ).
Was sToRkka in seinem Post geschrieben hat stimmt übrigens,steht aber auch in dem Thread aus dem du das Beispiel kopiert hattest.


MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
02.09.2004, 13:43 Uhr
~bonanza
Gast


DANKE aber wie kann ich denn für notepad.exe eine variable einführen so das ich am anfang gefragt werde welcher Prozess beendet werden soll?



C++:
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
#include <cstring>
using namespace std;

int main ()
{
string vari;
cin >> vari;
}

typedef BOOL(__stdcall *THFUNC)(HANDLE,LPPROCESSENTRY32);


void stop(){

DWORD dw;
HANDLE hSysSnapshot = NULL;
HANDLE h_pro;
PROCESSENTRY32 proc;

THFUNC pProcess32First=(THFUNC)GetProcAddress(GetModuleHandle("kernel32.dll"),"Process32First");
THFUNC pProcess32Next=(THFUNC)GetProcAddress(GetModuleHandle("kernel32.dll"),"Process32Next");
if(pProcess32First&&pProcess32Next)
    {
        proc.dwSize = sizeof(proc);
        hSysSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 );
        pProcess32First(hSysSnapshot,&proc);
        proc.dwSize = sizeof(proc);


        do{
            if(!strcmp(proc.szExeFile,"vari.c_str()")){//oder halt th32ProcessID verwenden
                  h_pro=OpenProcess(PROCESS_ALL_ACCESS, TRUE, proc.th32ProcessID);
                  GetExitCodeProcess(h_pro,&dw);
                  TerminateProcess(h_pro,dw);
            }
        }while(pProcess32Next(hSysSnapshot,&proc));
    }
}

//---------------------------------------------------------------------------------
int main2 ()
{

stop();
return 0;
}




so vielleicht?? fuzt aber leider net!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
02.09.2004, 14:07 Uhr
RedEagle




C++:
if(!strcmp(proc.szExeFile,"vari.c_str()")){//oder halt th32ProcessID verwenden



Kann auch nicht funktioneiren, es muss so sein:


C++:
if(!strcmp(proc.szExeFile, vari.c_str())){//oder halt th32ProcessID verwenden



Die Variable darf nicht in Anführungszeichern stehen
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
02.09.2004, 14:18 Uhr
RedEagle




C++:
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
#include <string>
using namespace std;

//hier würde man Globale Variablen definieren, braucht man daber in diesem fall nicht

typedef BOOL(__stdcall *THFUNC)(HANDLE,LPPROCESSENTRY32);


void stop(string variable){

DWORD dw;
HANDLE hSysSnapshot = NULL;
HANDLE h_pro;
PROCESSENTRY32 proc;

THFUNC pProcess32First=(THFUNC)GetProcAddress(GetModuleHandle("kernel32.dll"),"Process32First");
THFUNC pProcess32Next=(THFUNC)GetProcAddress(GetModuleHandle("kernel32.dll"),"Process32Next");
if(pProcess32First&&pProcess32Next)
    {
        proc.dwSize = sizeof(proc);
        hSysSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 );
        pProcess32First(hSysSnapshot,&proc);
        proc.dwSize = sizeof(proc);


        do{
            if(!strcmp(proc.szExeFile,variable.c_str())){//oder halt th32ProcessID verwenden
                  h_pro=OpenProcess(PROCESS_ALL_ACCESS, TRUE, proc.th32ProcessID);
                  GetExitCodeProcess(h_pro,&dw);
                  TerminateProcess(h_pro,dw);
            }
        }while(pProcess32Next(hSysSnapshot,&proc));
    }
}

//---------------------------------------------------------------------------------
int main ()
{
string eingabe;
cin >> eingabe;
stop(eingabe);
return 0;
}


--
MFG RedEagle

Dieser Post wurde am 02.09.2004 um 14:20 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: