Hi nochmal, ich habe ein programm geschrieben mit dem man eine beliebige webseite oder ein programm in einer gewünschten zeitspanne wiederholt öffnen kann, um counter zu testen ode in die höhe zu treiben^^. nun wird das ganze nach 10 geöffneten fenstern etwas stressig und windoof beginnt damit runtime errors und den ganzen schmonsens auszuspucken. also hab ich mir gedacht(leichtsinnig wie ich bin) wäre doch nit schlecht das das programm sich nach dem es geöffnet wird und ne zeit lang offfen bleibt, wieder beednet wird. also habe ichs ma mit KillProgram(Programm$) versucht. der will aber einen wert als programm, obwohl der durch die benutzereingabe gegeben ist. hier ist der quellcode, aber bitte nicht lachen falls es einfach geschrieben ist, ich bin noch nicht son pro in programmieren.
Global Geoeffnet.w
Global Programm.w
Global Zeit.f
Programm$ = InputRequester("Autostarter von St@ndFurz", "Gib den Pfad des Programms oder der Webseite ein:", Programm$)
Zeit$ = InputRequester("Autostarter von St@ndFurz", "Gib die Zeitspanne in Millisekunden an:", Zeit$)
Procedure Information(Parameter)
Dialog = MessageRequester("Autostarter von St@ndFurz","Programm läuft, zum beenden OK drücken!",0)
If Dialog = #IDOK
End
EndIf
EndProcedure
CreateThread(@Information(), 154)
Repeat
If Geoeffnet = 0
RunProgram(Programm$)
Geoeffnet = 1
Delay(Val(Zeit$))
KillProgram(Program$)
Geoeffnet = 0
EndIf
Until WaitWindowEvent() = #PB_Event_CloseWindow
Zuletzt geändert von D4uS1 am 07.10.2006 18:06, insgesamt 2-mal geändert.
Ja und auch nein. Guck dir den Befehl richtig an. Der Befehl hat noch andere Parameter. Da kannst du auch flags setzen. Und da gibt es einen flag namens PB_Program_Open. Den solltest du benutzen.
Startet ein externes Programm. Der 'DateiName$' sollte das Executable mit seinem kompletten Pfad enthalten. 'Parameter$' kann Kommandozeilen-Parameter beinhalten, welche an das Programm übergeben werden. 'Arbeitsverzeichnis$' kann ein Verzeichnis angeben, welches das aktuelles Verzeichnis für das externe Programm sein wird.
Flags sind optional und können eine Kombination (mittels '|' OR-Operator) der folgenden Werte sein:
#PB_Program_Wait : Wartet bis das gestartete Programm beendet wird
#PB_Program_Hide : Startet das Programm im unsichtbaren Modus #PB_Program_Open : Öffnet ein Programm, um mit diesem zu kommunizieren oder Informationen darüber zu erhalten
#PB_Program_Read : Liest die Konsolenausgabe des Programms (stdout)
#PB_Program_Write : Schreibt in die Eingabe des Programms (stdin)
#PB_Program_Error : Liest die Fehlerausgabe des Programms (stderr)
#PB_Program_Connect: Verbindet die Ausgabe eines anderen Programms mit der Eingabe dieses Programms
Ein mittels #PB_Program_Open ausgeführtes Programm muss mit CloseProgram() geschlossen werden. Die 'Read', 'Write', 'Error' und 'Connect' Flags benötigen auch ein gleichzeitig gesetztes #PB_Program_Open Flag.
Beim Verwenden des #PB_Program_Connect Flags muss zuvor ein anderes Programm mit den #PB_Program_Open und #PB_Program_Read Flags gestartet worden sein. Die beim Starten dieses Programms zurückgegebene Nummer muss als 'SenderProgramm' Parameter an RunProgram() übergeben werden. Die Ausgabe des "Sender-Programms" wird dann direkt an die Eingabe des nun ausgeführten Programms geschickt. Verschiedene Programme können auf diese Art und Weise verbunden werden, um Daten zwischen verschiedenen Programmen weiterzureichen (der englische Begriff ist 'pipe' - bildlich auch so vorstellbar: "der Datenstrom geht in einer Richtung durch alle Programme").
Die folgenden Befehle können verwendet werden, wenn ein Programm mit dem #PB_Program_Open Flag ausgeführt wurde:
- IsProgram(): überprüft, ob eine Nummer ein gültiges - mittels RunProgram() ausgeführtes Programm - darstellt.
- ProgramID(): gibt die OS Prozess-ID des Programms zurück.
- ProgramRunning(): überprüft, ob ein Programm noch läuft.
- WaitProgram(): wartet auf das Ende eines Programms.
- KillProgram(): beendet das Programm. - ProgramExitCode(): ermittelt den Exitcode des Programms. - CloseProgram(): schließt die Verbindung zum Programm.
Die folgenden Befehle können für Programme, welche mit den 'Read', 'Write' und 'Error' Flags ausgeführt wurden, verwendet werden:
- AvailableProgramOutput(): überprüft, ob die Ausgabe eines Programms verfügbar ist.
- ReadProgramString(): liest einen String von der Ausgabe des Programms.
- ReadProgramData(): liest Daten von der Ausgabe des Programms.
- ReadProgramError(): liest einen String von der Fehlerausgabe des Programms.
- WriteProgramString(): schreibt einen String in die Eingabe des Programms.
- WriteProgramData(): schreibt Daten in die Eingabe des Programms.
Rückgabewert
Konnte das Programm nicht ausgeführt werden, ist der Rückgabewert gleich null. War RunProgram() erfolgreich, ist der Rückgabewert ungleich null.
Wenn #PB_Program_Open in den übergebenen Flags enthalten war, ist der Rückgabewert eine Nummer, welche das Programm identifiziert. Diese kann beim Aufruf von Befehlen wie ReadProgramString() oder ProgramExitCode() verwendet werden, um Informationen über das Programm zu erhalten. Gleiches bei anderen der oben genannten Befehle analog.
Beispiel:
; Führt den PB Compiler mit der /? Option aus und stellt die Ausgabe dar (windows Version)
; Für Linux/MacOS ändern Sie das "/?" in "-h" und im Compiler-Pfad das "\" in "/".
;
Compiler = RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", "/?", "", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler
While ProgramRunning(Compiler)
Output$ + ReadProgramString(Compiler) + Chr(13)
Wend
Output$ + Chr(13) + Chr(13)
Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
EndIf
MessageRequester("Output", Output$)
also, editier bitte dein erstes posting, und mach den code als code lesbar.
einfach den kompletten code markieren, und auf den "Code"-button klicken...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Ihr könnt mich jetzt für dumm halten aber irgentwie versteh ich das nicht, ich kann machen was ich will es klappt nicht. Kann mir irgenteiner vieleicht den code nur von dem programmschliessen abschnitt machen, das wäre sehr nett.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.