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