Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi NetScheduleJobAdd Parameter?! (https://www.delphipraxis.net/76435-netschedulejobadd-parameter.html)

RobertP 4. Sep 2006 14:21


NetScheduleJobAdd Parameter?!
 
Moin, ich hab ein Problem mit der Funktion NetScheduleJobAdd:

Nen Task erstellen funktioniert, allerdings hab ich keine Ahnung was für Werte ich für die Parameter setzen soll. Die MSDN Library hat mich irgendwie mehr verwirrt als geholften :D Also JobTime muss ich in Millisekunden nach Mitternacht angeben, des funktioniert auch. Nur der Rest nicht. Wie gebe ich DaysOfMonth, DaysOfWeek und Flags an? Kann mir da bitte jemand helfen? Danke! :wink:


Delphi-Quellcode:
A.JobTime:=timeaftermidnight; // Millisekunden nach Mitternacht
    A.DaysOfMonth:= 0; // ??
    A.DaysOfWeek := 0;// ??
    A.Flags:=1; // ??
    A.Command:=PWideChar(path+#0); // Pfad zum Programm
    error:=NetScheduleJobAdd(nil, PA, JobId);
Grüße,
MrPayne

Christian Seehase 4. Sep 2006 16:19

Re: NetScheduleJobAdd Parameter?!
 
Moin Mr.Payne,

DaysOfMonth ist eine Bitfeld, dass heisst:
Jedes Bit des DWORD hat, allgemein ausgedrückt, eine eigene Bedeutung.
Im konkreten Fall steht hier jedes Bit (von rechts begonnen) für den Tag des Monats (1. bis 31.) an dem der Job gestartet werden soll.
Beispiel:
Du übergibst hier 5. Binär also 0000 0000 0000 0000 0000 0000 0000 1001 (32 Bit, da DWORD)
=> Der Job wird am 1. und 4. eines jeden Monats ausgeführt.

Analog gilt dies auch für DayOfWeek, wobei hier Bit 0 für Montag steht, Bit 1 für Dienstag usw.
Beispiel:
Du übergibst hier 7. Binär also 0000 1011 (8 Bit, da Char)
=> Der Job wird am Montag, Dienstag und Donnerstag gestartet.

Um jetzt zu ermitteln, welchen Wert Du übergeben musst, kannst Du so vorgehen:

DaysOfMonth := (2 shl (NummerDesErstenTages-1)) or (2 shl (NummerDesZweitenTages-1)) or ...

Das geht natürlich auch in einer Schleife, so dass die Gesamtzahl der Tage nicht festgeschrieben werden muss.
Den ersten Tag direkt zuweisen, die übrigen mit or ergänzen.

Für DaysOfWeek gilt dies analog. Wenn Du hier Montag den Wert 0 (Sonntag = 6) zuordnest, kannst Du Dir jeweils das -1 sparen.

Wird bei den beiden Werten 0 angegeben, so wird der Job nur einmal, bei ersten Auftreten von JobTime, gestartet.

Die Flags sollten in MSDN-Library durchsuchenAT_INFO erklärt sein (ggf. über MSDN-Library durchsuchenNetScheduleJobAdd zu erreichen)

Um mehrere Flags zu kombinieren muss auch or verwendet werden.

RobertP 4. Sep 2006 17:50

Re: NetScheduleJobAdd Parameter?!
 
Jetzt hab ichs endlich gecheckt wie des geht!! BIG THANKS!! :wink:

RobertP 4. Sep 2006 21:26

Re: NetScheduleJobAdd Parameter?!
 
Kann es sein dass man mit NetSchedule nicht alles machen kann was mit den geplanten Tasks normalerweise möglich ist? Was mach ich z.B. wenn ich nen Task machen will der nur einmal ausgeführt wird aber an nem bestimmten Datum? Oder wenn ich nen Task täglich ausführen will? (Wenn man nicht den Umweg über wöchentlich und dann an allen Tagen nimmt)

Najo bin jetzt eh erstmal paar Tage in Urlaub vielleicht fällt mir ja da au was ein :)

Grüße,
MrPayne


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz