Zur bestimmten Zeit ein Ereigniss ausführen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Wenn das hier eine Lösung nur für deinen PC werden soll, und du WIndows XP benutzt, dann kannst du auch shutdown.exe benutzen, denn da geht der Timer im Gegensatz zu Vista wenigstens noch länger als 10 Minuten. /:->
Einfach ausrechnen, in wie vielen Sekunden der PC heruntergefahren werden soll und

Code: Alles auswählen

RunProgram("shutdown", "-s -f -t N", "")
ausführen lassen, wobei du für "n" natürlich deine Sekunden einsetzen musst.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Leider ist es nicht für meinen PC, sondern einen Windows 2000 - PC in der Frima. Shutdown.exe existiert unter Windows 2000 nicht. Darum muss ich es eben selber schreiben.

RunProgramm kann ich nur ausführen, wenn der Benutzer angemeldet ist.

Das Problem ist nur, dass das Programm beim Willkommensbildschirm
(mit dem Taskplaner und Einstellung "Beim Systemstart") passieren soll.
Wegen der kurzen Zeit, ich will erreichen, das der PC am Wochenende,
wenn er mit Hilfe der BIOS-Einstellung morgens um 5:45 startet, dieser
dann genau um Sechs Uhr sich dann wieder ausschalten soll, da an diesen
Tagen keiner arbeitet. Der PC startet also jeden Tag und wird in der
Woche um 21.55Uhr heruntergefahren. Aber für das Wochenende
suche ich eine Lösung.

Wegen der Frage, wie will ich dieses Programm starten:
Unter XP und Vista nennt sich das Aufgabenplaner. Unter Win2000 ist
es unter Start/Einstellungen/Systemsteuerung --> Geplante Tasks, womit
man automatisch jedes Programm ausführen kann.

Die Möglichkeiten sind :
  • Jeden Tag
  • Ausgewählte Tage
  • Bei Anmeldung
  • Beim Systemstart.
Ein Benutzer und Passwort wird auch vorgegeben. Soweit funktioniert das
Programm intern in der Ausführung, was man an der erzeugten Log-Datei
sieht. Wenn die Zeit erreicht ist, wird sogar korrekt Uhrzeit mit
Bindestrichen in der Logdatei eingetragen wo diese überprüfte Zeit zutrifft. Nur wird halt nicht das Shutdown ausgeführt.

Da ist eben mein Problem und ich würde mich freuen, wenn ihr dazu
vielleicht eine Lösung habt, oder den Grund wisst, warum das Shutdown
nicht ausgeführt wird. Nochmal vielen Dank für eure Anteilnahme.

Grüße, Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

shutdown unter w2k sollte mit psshutdown aus den pstools von
sysinternals.com (mittlerweile von ms gekauft) gehen .

autostartmöglichkeiten gibt es viele .

versuch mal aus dem betreffenden rechner in der eingabeaufforderung
gpedit.msc
einzugeben. falls das gelingt hast du per policy möglichkeiten ein
windowsstartscript einzutragen . das kann auch eine exe sein und
die machst du dir eben .. wochentag und zeit rausfieseln und
wochenenden (und feiertagen :twisted: ) den rechner eben
runterfahren mit obigen codes oder mit psshutdown


ich tät's selber ja lieber als service lösen mögen wollen .
is ja letztlich vom programm ähnlich nur die startprozedur hängt
woanders rum.
Zuletzt geändert von bobobo am 28.10.2008 15:32, insgesamt 1-mal geändert.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

bobobo hat geschrieben:woanders rum.
Bild
Little John

Beitrag von Little John »

Falko,

ich würde folgendermaßen an die Sache herangehen:

Ein Script oder ein EXE-Programm schreiben, das bei jedem Start von Windows ausgeführt wird. Dieses Programm prüft, ob Wochenende oder Feiertag ist. Wenn ja, fährt das Programm den Computer z.B. mit Hilfe des Codes von Thomas herunter, ansonsten macht das Programm gar nichts und endet.

Im Windows Taskplaner einrichten, dass der Computer jeden Tag um 21:55 Uhr heruntergefahren wird. Unter der Woche passiert das dann auch. Am Wochenende und an Feiertagen kommt es nicht dazu weil das andere Programm den Computer schon längst vorher ausgeschaltet hat, aber das stört ja nicht weiter.

Gruß, Little John
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Dann braucht man den Taskplaner aber auch nicht mehr.

Ich hatte mir auch mal ein Programm mit Purebasic geschrieben, dass den
Rechner zu einer bestimmten Zeit heruntergefahren hatte. Das Programm
wurde per Autostart, also beim Hochfahren, gestartet und hatte eine kleine
Schleife mit einem 'Delay(1000)', die sekündlich überprüft hat, ob die
angegebene Zeit erreicht oder schon überschritten wurde und hat dann die
Procedure von Thomas aufgerufen.

Hier gibts das kleine Progrämmchen. Allerdings ist das eine leicht modifizierte Version.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

@bobobo,
das mit dem gpedit.msc und dort ein Startscript ausführen, z.B. folgende
StartShutdown.cmd hat geschrieben:START c:\ShutdownSixWeekend.exe
EXIT
Beides, Sript und ShutdownSixWeekend.exe habe ich testweise in Laufwerk
C: kopiert. Wenn ich absichtlich den EXE-Namen falsch eingebe, meckert Windows, das die Datei nicht gefunden werden kann. Bei richtiger Eingabe
aber, warte ich und warte ich usw. und es tut sich nichts.
Wenn ich dann also aus meiner Willkommenmaske mich als Benutzer (Admin) anmelde und dann unter Laufwerk C: schaue, wurde anscheinend nichts gestartet, da ja auch keine Log-Datei geschrieben wurde.

Ein Dienst wäre mir auch lieber, nur wollte ich nichts fremdes auf den Firmenrechner installieren und daher die Überlegung einer einfachen Shutdownprozedur.

@Little John,
so wie du es beschrieben hattest, habe ich es auch gemacht. Oben weiter in diesem Thread habe ich Teile von Thomas Script für meine Exe genutzt und für Wochentagsabfrage als auch Uhrzeitprüfung gesorgt.

Beim Systemstart ausführen unter Taskplaner, wird wohl das Programm zwar während der Willkommensseite ausgeführt, wobei man noch nicht als Benutzer angemeldet ist. Ok, das erledigt der Taskplaner bzw. der Aufgabenplaner, der ein Login mit Adminrechten ausführen lässt und dann
das Programm korrekt startet.

Wenn ich nun nach der verstrichenen Zeit anmelde, da kein Shutdown stattgefunden hat, öffne ich nun das Laufwerk C: und sehe dort die gewollte Timer.log. Darin lasse ich die Zeiten eintragen. Die Zeit, wo der Shutdown hätte stattfinden müssen, wird mit Bindestrichen gekennzeichnet. Dieser Writebefehl findet kurz vor dem Shutdown, an innerhalb der If-Schleife statt. Also wurde die richtige if-abfrage angesprungen. Wenn man nun wüsste warum das so ist. Anscheinend ist es so wohl nicht möglich.

Gruß Falko
Zuletzt geändert von Falko am 28.10.2008 17:31, insgesamt 1-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Little John

Beitrag von Little John »

NicTheQuick hat geschrieben:Dann braucht man den Taskplaner aber auch nicht mehr.
Wenn man den Taskplaner benutzt, dann ist es nicht nötig dass während der Woche den ganzen Tag über das selbstgeschriebene Programm im Hintergrund läuft. Ich dachte mir, das sei ressourcenschonender, aber das ist nur geraten. :-)

Gruß, Little John
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Mein EnableShutdown erfordert wohl einen angemeldeten User, sind also
Änderungen nötig. Sollte in der MSDN zu finden sein, bzw. man kann auch
im Taskplaner das Programm mit höheren Rechten starten, könnte auch
helfen. (mit höchsten Priviligien ausführen checken, ist für einfache Aufgaben nicht verfügbar)

Gruß
Thomas
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.
Bild
Little John

Beitrag von Little John »

bobobo hat geschrieben:autostartmöglichkeiten gibt es viele
Vielleicht ist es auch noch wichtig, auf welche Weise man sein eigenes Shutdown-Programm startet? Nur so'n Gedanke.

Gruß, Little John
Antworten