Suche x64 Version KillAllProcessesByName()

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
stab
Beiträge: 96
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Suche x64 Version KillAllProcessesByName()

Beitrag von stab »

Hallo,

vor langer Zeit hatte ich folgende Funktion gefunden und in meine Software eingebaut:

Code: Alles auswählen

Procedure KillAllProcessesByName(ProcessName.s)
  ; PB 4.30
  ; Remove multiple processes without GUI...
  
  #PROCESS_TERMINATE = $1
  #PROCESS32LIB = 9999
  #TH32CS_SNAPPROCESS = $2
  
  If OpenLibrary (#PROCESS32LIB, "kernel32.dll")
    snap= CallFunction (#PROCESS32LIB, "CreateToolhelp32Snapshot", #TH32CS_SNAPPROCESS, 0)
    If snap 
      Define.PROCESSENTRY32 Proc32
      Proc32\dwSize = SizeOf (PROCESSENTRY32)
      If CallFunction (#PROCESS32LIB, "Process32First", snap, @Proc32) 
        Repeat
          ProcName.s = PeekS(@Proc32 + 36, 296,#PB_Ascii) 
          Debug procname.s
          If LCase(Left(ProcName,8)) = LCase(Left(ProcessName.s,8)) ; Groß/Klein und diverse Versionen von "notepad"
            phandle = OpenProcess_ (#PROCESS_TERMINATE, #False, PeekL(@Proc32 + 8))
            If phandle <> #Null
              If TerminateProcess_ (phandle, 1)
              result = #True:  EndIf
              CloseHandle_ (phandle)
            EndIf
          EndIf
        Until CallFunction (#PROCESS32LIB, "Process32Next", snap, @Proc32) = 0
      EndIf
      CloseHandle_ (snap)
    EndIf
    CloseLibrary (#PROCESS32LIB)
  EndIf
EndProcedure

KillAllProcessesByName("notepad.exe")
Funktioniert in der 32Bit Version immer noch einwandfrei.

Hat jemand sowas auch für x64 irgendwo mal gefunden oder parat?
Ich bin da überfordert.
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Suche x64 Version KillAllProcessesByName()

Beitrag von mk-soft »

Funktioniert genauso wie vorher, nur etwas angepasst.

PB Verwendet automatisch die W (unicode) API Funktionen. Daher kein PeekS string mit ASCII

Code: Alles auswählen

Procedure KillAllProcessesByName(ProcessName.s)
  ; PB 4.30
  ; Remove multiple processes without GUI...
  
  #PROCESS_TERMINATE = $1
  #TH32CS_SNAPPROCESS = $2
  
  ProcessName = LCase(ProcessName)
  
  snap = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If snap 
    Define.PROCESSENTRY32 Proc32
    Proc32\dwSize = SizeOf (PROCESSENTRY32)
    If Process32First_(snap, @Proc32) 
      Repeat
        ProcName.s = PeekS(@proc32\szExeFile)
        Debug procname.s
        ProcName = LCase(ProcName)
        ;If LCase(Left(ProcName,8)) = LCase(Left(ProcessName.s,8)) ; Groß/Klein und diverse Versionen von "notepad"
        If ProcName = ProcessName
          phandle = OpenProcess_(#PROCESS_TERMINATE, #False, Proc32\th32ProcessID)
          If phandle <> #Null
            If TerminateProcess_ (phandle, 1)
              result = #True
            EndIf
            CloseHandle_ (phandle)
          EndIf
        EndIf
      Until Process32Next_(snap, @Proc32) = 0
    EndIf
    CloseHandle_ (snap)
  EndIf
EndProcedure

KillAllProcessesByName("notepad.exe")
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
stab
Beiträge: 96
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: Suche x64 Version KillAllProcessesByName()

Beitrag von stab »

Vielen Dank mk-soft !!!

Suuuuuuper, funktioniert einwandfrei.
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Antworten