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. |