Messagerequester vereinfachen, wie?

Anfängerfragen zum Programmieren mit PureBasic.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Messagerequester vereinfachen, wie?

Beitrag 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.
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Messagerequester vereinfachen, wie?

Beitrag 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)
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Re: Messagerequester vereinfachen, wie?

Beitrag 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)
PureBasic 6.00 | Windows 10 pro (x64)
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Messagerequester vereinfachen, wie?

Beitrag 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.
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Re: Messagerequester vereinfachen, wie?

Beitrag 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
PureBasic 6.00 | Windows 10 pro (x64)
Antworten