Seite 1 von 1

Prozess über Prozessnamen killen

Verfasst: 12.08.2005 14:15
von PAMKKKKK
Der Code ist nicht von mir!
ist von Hi-Toro :allright:
Ich habe die 2 Codes eigentlich nur zusammengeklebt.
Aber weil damit auch Anfänger umgehen können, Poste ich das mal.

Damit kann man Prozesse bei Nennung des *.exe Namen abschiessen.

Code: Alles auswählen

; Author: Hi-Toro
; Date: 30. November 2003
; Should run on all Windows version from Win95 till WinXP !!
; Modified by Pamkkkkk 12.August 2005
; PB3.93

Procedure.b KillProcess (PID) 
; Author: Hi-Toro
; Date: 30. November 2003
; Kills a Process by given Process Number (ID) 
; Returns #True if Process is killed #False if its not
  
  #PROCESS_TERMINATE = $1 
  #PROCESS_CREATE_THREAD = $2 
  #PROCESS_VM_OPERATION = $8 
  #PROCESS_VM_READ = $10 
  #PROCESS_VM_WRITE = $20 
  #PROCESS_DUP_HANDLE = $40 
  #PROCESS_CREATE_PROCESS = $80 
  #PROCESS_SET_QUOTA = $100 
  #PROCESS_SET_INFORMATION = $200 
  #PROCESS_QUERY_INFORMATION = $400 
  #PROCESS_ALL_ACCESS = #STANDARD_RIGHTS_REQUIRED | #SYNCHRONIZE | $FFF 
  
  ; This appears to be pretty much how Windows kills a program if you 'End Process' 
  ; from the Task Manager. Note that this is 'unfriendly'! 
  
  result = #False
  phandle = OpenProcess_ (#PROCESS_TERMINATE, #False, PID) 
  If phandle <> #Null 
    If TerminateProcess_ (phandle, 1) 
      result = #True 
    EndIf 
    CloseHandle_ (phandle) 
  EndIf 
  ProcedureReturn result 
EndProcedure 

Procedure.b Kill_Prozess_by_Name(ProcName.s)
; Author: Hi-Toro
; Date: 30. November 2003
; Modified by Pamkkkkk 12.August 2005
; Should run on all Windows version from Win95 till WinXP !!
; Crowls thru the running Processes, to find the Prozess ID from a given Prozessname
; Returns #True if Process is found #False if its not found
  
PID.l = 0
 
#TH32CS_SNAPHEAPLIST = $1 
#TH32CS_SNAPPROCESS = $2 
#TH32CS_SNAPTHREAD = $4 
#TH32CS_SNAPMODULE = $8 
#TH32CS_SNAPALL = #TH32CS_SNAPHEAPLIST | #TH32CS_SNAPPROCESS | #TH32CS_SNAPTHREAD | #TH32CS_SNAPMODULE 
#TH32CS_INHERIT = $80000000 
#INVALID_HANDLE_VALUE = -1 
#PROCESS32LIB = 9999 

Structure PROCESSENTRY32 
  dwSize.l 
  cntUsage.l 
  th32ProcessID.l 
  th32DefaultHeapID.l 
  th32ModuleID.l 
  cntThreads.l 
  th32ParentProcessID.l 
  pcPriClassBase.l 
  dwFlags.l 
  szExeFile.b [#MAX_PATH] 
EndStructure 

; NOTE: I've chosen to add processes to this list so that it can be played with as necessary... 

NewList Process32.PROCESSENTRY32 () 

; Add processes to Process32 () list... 

If OpenLibrary (#PROCESS32LIB, "kernel32.dll") 
  
  snap = CallFunction (#PROCESS32LIB, "CreateToolhelp32Snapshot", #TH32CS_SNAPPROCESS, 0) 
  
  If snap 
    
    DefType.PROCESSENTRY32 Proc32 
    Proc32\dwSize = SizeOf (PROCESSENTRY32) 
    
    If CallFunction (#PROCESS32LIB, "Process32First", snap, @Proc32) 
      
      AddElement (Process32 ()) 
      CopyMemory (@Proc32, @Process32 (), SizeOf (PROCESSENTRY32)) 
      
      While CallFunction (#PROCESS32LIB, "Process32Next", snap, @Proc32) 
        AddElement (Process32 ()) 
        CopyMemory (@Proc32, @Process32 (), SizeOf (PROCESSENTRY32)) 
      Wend 
      
    EndIf    
    CloseHandle_ (snap) 
    
  EndIf 
  
  CloseLibrary (#PROCESS32LIB) 
  
EndIf 

; List processes... 

ResetList (Process32 ()) 

While NextElement (Process32 ())
  If  UCase(ProcName.s) = UCase(PeekS (@Process32 ()\szExeFile))
    PID = PeekL (@Process32 ()\th32ProcessID)
  EndIf
Wend

If PID > 0
  If  KillProcess (PID)
    ProcedureReturn #True
  EndIf
EndIf
ProcedureReturn #False
EndProcedure 


;-Example Call :::

Debug Kill_Prozess_by_Name("firefox.exe")

; ExecutableFormat=Windows
; EOF
@Experten: Ist es da besser th32ParentProcessID zu nehmen ?

Verfasst: 12.08.2005 14:57
von ts-soft
Benutzer der PBOSL Libs brauchen dafür nur:

Code: Alles auswählen

KillAllProcess("Firefox.exe",0)
eingeben :wink:

Verfasst: 12.08.2005 15:36
von PAMKKKKK
ts-soft hat geschrieben:Benutzer der PBOSL Libs brauchen dafür nur:

Code: Alles auswählen

KillAllProcess("Firefox.exe",0)
eingeben :wink:
Das ist natürlich noch einfacher :allright:

Leider sind die meisten PBOSL sehr schlecht Dokumentiert..... :?

Verfasst: 12.08.2005 16:02
von ts-soft
PAMKKKKK hat geschrieben:Leider sind die meisten PBOSL sehr schlecht Dokumentiert..... :?
Einige sind schon schlecht dokumentiert. Da jedoch der Source bei ist, sowie diverse Examples, sollte man trotzdem klarkommen. Es darf übrigens auch jeder bei der Hilfe und bei den Examples mithelfen :wink:

Verfasst: 12.08.2005 22:56
von PAMKKKKK
@ts-soft
Hab schon mit Dokumentiern angefangen.... :mrgreen:

guckstu hier:
http://forums.purebasic.com/german/viewtopic.php?t=4360

Verfasst: 13.08.2005 11:31
von ts-soft
PAMKKKKK hat geschrieben:@ts-soft
Hab schon mit Dokumentiern angefangen.... :mrgreen:

guckstu hier:
http://forums.purebasic.com/german/viewtopic.php?t=4360
Beim nächstem Update ist Dein Beispiel auch im Examples Ordner :allright:
Ich warte ja eigentlich nur noch auf PB3.94 um ein dazu kompatibles Paket rauszubringen.

Verfasst: 24.06.2006 20:21
von a14xerus
bei mir kommt immer :
invalid memory adress (im debugmode)
wenn ich normal starte stürzt das programm ab
(der code besteht nur aus KillAllProcess("Firefox.exe",0) )