Anfängerfragen zum Programmieren mit PureBasic.
Nino
Beiträge: 1300 Registriert: 13.05.2010 09:26
Wohnort: Berlin
Beitrag
von Nino » 11.07.2015 21:01
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.
Vera
Beiträge: 928 Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen
Beitrag
von Vera » 11.07.2015 21:34
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)
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Zerosurf
Beiträge: 131 Registriert: 11.10.2005 15:46
Beitrag
von Zerosurf » 11.07.2015 22:08
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)
PureBasic 6.00 | Windows 10 pro (x64)
Vera
Beiträge: 928 Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen
Beitrag
von Vera » 11.07.2015 22:32
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.
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Zerosurf
Beiträge: 131 Registriert: 11.10.2005 15:46
Beitrag
von Zerosurf » 11.07.2015 23:23
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
PureBasic 6.00 | Windows 10 pro (x64)