Seite 1 von 2
Messagerequester vereinfachen, wie?
Verfasst: 11.07.2015 16:42
von Zerosurf
Wie kann ich bei folgendem Code nur einen Messagerequester mit allen Infos darin bekommen?
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
;test:
If TerminateProcess("CCleaner64.exe")
MessageRequester("","CCleaner64.exe was successfully terminated",0)
Else
MessageRequester("","Failed to terminate CCleaner64.exe",0)
EndIf
If TerminateProcess("Eraser.exe")
MessageRequester("","Eraser.exe was successfully terminated",0)
Else
MessageRequester("","Failed to terminate Eraser.exe",0)
EndIf
If TerminateProcess("flux.exe")
MessageRequester("","flux.exe was successfully terminated",0)
Else
MessageRequester("","Failed to terminate flux.exe",0)
EndIf
Re: Messagerequester vereinfachen, wie?
Verfasst: 11.07.2015 16:53
von Nino
Zerosurf hat geschrieben:Wie kann ich bei folgendem Code nur einen Messagerequester mit allen Infos darin bekommen?
Ganz einfach, Du erzeugst entsprechend den Bedingungen eine Stringvariable mit den betreffenden Angaben, und zeigst dann im MessageRequester den Inhalt dieser Stringvariablen.
Beispiel:
Code: Alles auswählen
Define message$, dies.i=#True, sonst.i=#False
If dies
message$ = "Dies"
Else
message$ = "Das"
EndIf
If sonst
message$ + " und sonstiges."
Else
message$ + " und anderes."
EndIf
MessageRequester("Titel", message$)
Re: Messagerequester vereinfachen, wie?
Verfasst: 11.07.2015 16:55
von Zerosurf
Super, vielen Dank - jetzt nur noch richtig einsetzen! Mal schaun, ob ich das schaffe!

Re: Messagerequester vereinfachen, wie?
Verfasst: 11.07.2015 17:01
von Nino
Das ist sicher eine gute Übung.
Du kannst übrigens in dem Meldungsstring auch
verwenden, um einen Zeilenumbruch einzufügen.
Dadurch lassen sich auch etwas längere Meldungen übersichtlich gestalten.
Re: Messagerequester vereinfachen, wie?
Verfasst: 11.07.2015 17:03
von uweb
oder 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
MessageRequester("",TerminateProcessMessageText("CCleaner64.exe")+TerminateProcessMessageText("Eraser.exe")+TerminateProcessMessageText("flux.exe"),0)
... dabei habe ich doch extra nach CHR(13) gesucht

trotzdem Danke fürs #LF$
Re: Messagerequester vereinfachen, wie?
Verfasst: 11.07.2015 19:36
von Zerosurf
So, jetzt hab ich den Code nochmal angepasst, aber jetzt hab ich wieder das selbe Problem, wie vorher - jetzt zeigt er mir wieder jede MessageRequester einzeln an - hier der Code:
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
; MessageRequester("",TerminateProcessMessageText("CCleaner64.exe")+TerminateProcessMessageText("Eraser.exe")+TerminateProcessMessageText("flux.exe"),0)
Dim tokill.s(2)
tokill(0) = "CCleaner64.exe"
tokill(1) = "Eraser.exe"
tokill(2) = "flux.exe"
Define x
For x.i = 0 To 2
MessageRequester("",TerminateProcessMessageText(tokill(x)),0)
Next x
Was mach ich falsch?
Re: Messagerequester vereinfachen, wie?
Verfasst: 11.07.2015 20:33
von Nino
Zerosurf hat geschrieben:So, jetzt hab ich den Code nochmal angepasst, aber jetzt hab ich wieder das selbe Problem, wie vorher - jetzt zeigt er mir wieder jede MessageRequester einzeln an
Ja, weil Du es halt so programmiert hast.
Zerosurf hat geschrieben:Was mach ich falsch?
Sorry, aber noch einfacher als
hier oben kann ich es nicht erklären. Statt immer gleich den betr. Text in einem MessageRequester anzuzeigen, werden alle anzuzeigenden Texte erstmal in einer Stringvariablen gesammelt, und zum Schluss wird für den
gesamten Text dann nur
1x ein MessageRequester aufgerufen.
Wenn Du meinen obigen Code nicht auf Dein Problem übertragen kannst, musst Du Dich vielleicht erstmal mehr mit ein paar Grundlagen beschäftigen, z.B. was Variablen sind und wie man sie verwendet.
Ich werde den fertigen Code nicht für Dich schreiben, Du würdest dann nicht so viel lernen.
Re: Messagerequester vereinfachen, wie?
Verfasst: 11.07.2015 20:44
von Zerosurf
funktioniert das auch mit dem array?
Re: Messagerequester vereinfachen, wie?
Verfasst: 11.07.2015 20:47
von Nino
Es gibt bestimmt ein halbes Dutzend Möglichkeiten das zu implementieren (auch mit einem Array).
Ich würde es so einfach wie möglich machen -- noch ein drittes Mal werde ich es nicht erklären.
Re: Messagerequester vereinfachen, wie?
Verfasst: 11.07.2015 20:53
von Zerosurf
Egal, ich muss halt jetzt jedesmal OK bestätigen - ist halt nicht so fein, aber falls jemand eine Lösung für mich hat, wo ich nur ein Messagerequester angezeigt bekomme, würde ich mich sehr über diese freuen!
Das ist jetzt der Code:
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
For x = 0 To 10
MessageRequester("Termination Status",TerminateProcessMessageText(tokill(x)),0)
Next x
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!