Seite 2 von 2

Re: Messagerequester vereinfachen, wie?

Verfasst: 11.07.2015 21:01
von Nino
Zerosurf hat geschrieben:Nino, vielleicht wärst ja du doch so nett, und könntest mir die Lösung posten - vor allem weil sie so einfach scheint und ich schon die ganze Zeit daran tüfftel, aber trotzdem nichts schaffe!
Ich habe Dir schon 2x erklärt, was Du machen sollst (mit Codebeispiel).
Du hast nicht mal ansatzweise versucht das umzusetzen.
Ich bin jetzt aus diesem Thread raus.

Re: Messagerequester vereinfachen, wie?

Verfasst: 11.07.2015 21:34
von Vera
Hi Zerosurf,
manchmal ist es ganz verflixt ... und nachher staunt man, wie nah man an der Lösung gewesen war :wink:
Viel Spass beim Terminieren.

Code: Alles auswählen

EnableExplicit

Global All_collected_MSGs$ = ""

Procedure.s TerminateProcessMessageText(Name.s)
  Protected result.s
  
  ProcedureReturn  "About to terminate "+Name+#LF$
EndProcedure

Dim tokill.s(10)
tokill(0) = "CCleaner64.exe"
tokill(1) = "Eraser.exe"
tokill(2) = "flux.exe"
tokill(3) = "iTunesHelper.exe"
tokill(4) = "MonitorSwitcher.exe"
tokill(5) = "WDDMStatus.exe"
tokill(6) = "KLM.exe"
tokill(7) = "HD-Agent.exe"
tokill(8) = "nvtray.exe"
tokill(9) = "QHSafeTray.exe"
tokill(10) = "VGAOCAP.exe"

Define.i x

For x = 0 To 10
   All_collected_MSGs$ =  All_collected_MSGs$ + TerminateProcessMessageText(tokill(x))
Next x 

MessageRequester("Termination Status", All_collected_MSGs$, 0)

Re: Messagerequester vereinfachen, wie?

Verfasst: 11.07.2015 22:08
von Zerosurf
Vera, vielen Dank!

Warum eigentlich Global?

Habs jetzt ohne Global gemacht und es funktioniert auch so:

Code: Alles auswählen

EnableExplicit

Procedure GetPidFromName(Name.s)
  Protected result
  Protected Process.PROCESSENTRY32
  Protected ProcSnap = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If ProcSnap <> #ERROR_INVALID_HANDLE
    Process\dwsize = SizeOf(PROCESSENTRY32)
    If Process32First_(ProcSnap, Process) = #True
      While Process32Next_(ProcSnap, Process) <> #False
        If Trim(PeekS(@Process\szExeFile,#MAX_PATH)) = Name.s
          result = Process\th32ProcessID
          Break
        EndIf
      Wend
    EndIf
    CloseHandle_(ProcSnap)
  EndIf
  ProcedureReturn result
EndProcedure

Procedure TerminateProcess(Name.s, ExitCode = 0)
  Protected result
  Protected processID = GetPidFromName(Name.s)
  If processID
    Protected hProcess  = OpenProcess_(#PROCESS_TERMINATE, #False, processID)
    If hProcess
      If TerminateProcess_(hProcess, ExitCode)
        result = #True
      EndIf
      CloseHandle_(hProcess)
    EndIf
  EndIf
  ProcedureReturn result
EndProcedure

Procedure.s TerminateProcessMessageText(Name.s)
  Protected result.s
  If TerminateProcess(Name.s)
    ProcedureReturn Name+" was successfully terminated"+#LF$
  Else
    ProcedureReturn  "Failed to terminate "+Name+#LF$
  EndIf
EndProcedure

Dim tokill.s(10)
tokill(0) = "CCleaner64.exe"
tokill(1) = "Eraser.exe"
tokill(2) = "flux.exe"
tokill(3) = "iTunesHelper.exe"
tokill(4) = "MonitorSwitcher.exe"
tokill(5) = "WDDMStatus.exe"
tokill(6) = "KLM.exe"
tokill(7) = "HD-Agent.exe"
tokill(8) = "nvtray.exe"
tokill(9) = "QHSafeTray.exe"
tokill(10) = "VGAOCAP.exe"

Define.i x
Define.s acm

For x = 0 To 10
   acm =  acm + TerminateProcessMessageText(tokill(x))
Next x

MessageRequester("Termination Protokol", acm, 0)

Re: Messagerequester vereinfachen, wie?

Verfasst: 11.07.2015 22:32
von Vera
Gern geschehen :-)

Ach, mit Global hatte ich angesetzt, weil ich es zuerst auf die TerminateProcessMessageText - Procedure abgesehen hatte.
Am Ende habe ich es einfach so belassen, da es nicht stört und Du den Code vielleicht noch einige Male umgestalltest und das All_collected_MSGs$ dann vielleicht doch innerhalb einer Procedure verwendet wird.

Re: Messagerequester vereinfachen, wie?

Verfasst: 11.07.2015 23:23
von Zerosurf
So, jetzt hab ich es auch geschafft, eine externe Text Datei einzubinden und somit das Programm unabhänging zu machen!

Hier nochmal der Code und vielen Dank für den Support hier - hab wieder einiges lernen dürfen!!!!

Code: Alles auswählen

EnableExplicit

Procedure GetPidFromName(Name.s)
  Protected result
  Protected Process.PROCESSENTRY32
  Protected ProcSnap = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If ProcSnap <> #ERROR_INVALID_HANDLE
    Process\dwsize = SizeOf(PROCESSENTRY32)
    If Process32First_(ProcSnap, Process) = #True
      While Process32Next_(ProcSnap, Process) <> #False
        If Trim(PeekS(@Process\szExeFile,#MAX_PATH)) = Name.s
          result = Process\th32ProcessID
          Break
        EndIf
      Wend
    EndIf
    CloseHandle_(ProcSnap)
  EndIf
  ProcedureReturn result
EndProcedure

Procedure TerminateProcess(Name.s, ExitCode = 0)
  Protected result
  Protected processID = GetPidFromName(Name.s)
  If processID
    Protected hProcess  = OpenProcess_(#PROCESS_TERMINATE, #False, processID)
    If hProcess
      If TerminateProcess_(hProcess, ExitCode)
        result = #True
      EndIf
      CloseHandle_(hProcess)
    EndIf
  EndIf
  ProcedureReturn result
EndProcedure

Procedure.s TerminateProcessMessageText(Name.s)
  Protected result.s
  If TerminateProcess(Name.s)
    ProcedureReturn Name+" was successfully terminated"+#LF$
  Else
    ProcedureReturn  "Failed to terminate "+Name+#LF$
  EndIf
EndProcedure

Define.s acm

If ReadFile(0, "killit.txt")
    While Eof(0) = 0
      acm = acm + TerminateProcessMessageText(ReadString(0))
    Wend
    CloseFile(0)
    MessageRequester("Termination Protokol", acm, 0)
  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
EndIf