# Deutsche Übersetzung: Stefan Schuck, Stefan@ComputerDienst24.de, # Deutschland/Kaiserslautern, im April 2003. # Wenn Sie einen Fehler in der Übersetzung entdeckt haben, # oder etwas missverständlich formuliert ist, # können Sie mir gerne eine eMail senden. # -------------------------------------------------------------------------- # Diese Datei enthält einige brauchbare nnCron Beispiele zum nachmachen. # Umgebungs- Variablen einrichten: #SET CurTime=%hh%-%mm% #SET FIDOCONFIG=d:\fido\hpt\fido.cfg #SET SCITE_HOME=d:\tools\scite #SET WGETRC=d:\tools\wget\wget.rc # Beispiele mit dem Klassischem Format: # Minuten Stunden Tage Monate Wochentage Jahre Kommando # 30 1 * * * * Dein_Programm.exe # 0 12,17 * * * * cmd /c "E:\home\nick\Bücher\knut\knut\KNUT-ALL.PDF" # 15,20,30 * * 1,2,3,4 1-5 2000 test.cmd XXX-%TempFile%-YYY-%COMPUTERNAME%-ZZ && TIME /T >>xxx # START-TIME cmd /c E:\home\nick\Bücher\progs\pietrekbook.pdf # Beispiele mit dem Erweitertem Format: # \ Text NACH Backslash '\ ' und einem Leerzeichen ist nur Kommentar. ############################################################################## #( Glockenschlag \ akustische Zeitanzeige Time: */15 \ alle 15 Minuten, 0, 15, 30, 45 ... Action: Min@ 0 = \ warten bis 0 Minuten \ also zur Vollen Stunde IF \ ist das so? (gleich Null) 50 7000 BEEP \ gib einen Ton aus ELSE \ ansonsten Min@ 30 = \ Minuten gleich Dreißig (halbe Stunde) IF \ ist das so? 50 7000 BEEP \ gib einen Ton aus 50 7000 BEEP \ und noch einen 50 7000 BEEP \ und noch´mal ELSE \ ansonsten \ also bei 15 und bei 45 Minuten 50 7000 BEEP \ gib einen Ton aus 50 7000 BEEP \ und noch einen THEN \ Ende von ELSE THEN \ Ende von ELSE )# ############################################################################## # Diese Aufgabe sperrt deinen Computer zu einer bestimmten Zeit #( Sperren-Aufgabe #WINAPI: LockWorkStation USER32.DLL #Action: # LockWorkStation DROP )# ############################################################################## # Diese Aufgabe probiert fünf verschiedene Telefonnummer um eine Internet # Verbindung herzustellen. Wenn die Verbindung hergestellt wurde, # wird das 'Rufe-Mails-ab.cmd' gestartet #( Internet_Einwahl Time: 0 * * * * * \ jede Stunde Action: ONLINE: "e96" 0= \ wenn NICHT Online IF 5 0 DO \ 5 mal Schleife durchlaufen RASUser: "xxxx" RASPassword: "yyyyy" I \ Schleifen Zähler CASE \ Auswahl 0 OF RASPhone: "P2128506" ENDOF 1 OF RASPhone: "P2128507" ENDOF 2 OF RASPhone: "P2128508" ENDOF 3 OF RASPhone: "P2128509" ENDOF 4 OF RASPhone: "P2128510" ENDOF ENDCASE DIAL: "e96" ONLINE: "e96" \ Jetzt Online? IF \ Wenn 'JA' LEAVE \ Verlasse die Schleife THEN 10000 PAUSE \ warte 10 Sekunden LOOP \ Ende der Schleife THEN START-APP: Rufe-Mails-ab.cmd )# ############################################################################## # Diese Aufgabe überwacht die Zwischenablage ob diese URLs enthält die # downgeloadet werden können und startet 'wget.exe' und übergibt die URL # als Parameter. Regular Expressions werden benutzt um die URL zu erkennen. # http ODER ftp:\\irgendwas am Anfang.zip ODER gz ODER rar ODER .... #( WGET_task : WGET-PAT S" /(http)|(ftp):\/\/[^ ]+?\.(zip)|(gz)|(rar)|(jpeg)|(jpg)|(exe)/i" ; WatchClipboard: * Rule: RE-MATCH: %CLIPBOARD% %WGET-PAT% Action: RE-ALL: %CLIPBOARD% %WGET-PAT% QUERY: "Download %$0%?" \ Nachfrage beim Benutzer IF \ wenn Benutzer mit JA antwortet ShowNormal StartIn: e:\home\download \ Startverzeichnis START-APP: e:\bin\wget.exe %$0% \ Starte Pfad\wget.exe, URL als Parameter THEN ;RE-ALL )# ############################################################################## # Diese beiden Aufgaben notieren Verbindungs- Aktivitäten ins Internet # (An/Abmelden). Logdateien werden im 'log\ras' Verzeichnis gespeichert. <% VARIABLE AnmeldeZeit VARIABLE AbmeldeZeit : raslogname S" log\ras\%YYYY%%MM%.log" EVAL-SUBST ; : ConnTimeInSec AbmeldeZeit @ AnmeldeZeit @ - 1000 / ; : ConnTimeInMin ConnTimeInSec 60 /MOD SWAP IF 1+ THEN ; %> #( CONNECT WatchConnect Action: GetTickCount AnmeldeZeit ! GET-CUR-TIME LOG: %raslogname% "%WW% %DD% %hh%:%mm%:%ss% connect %CONNECTION%" )# #( DISCONNECT WatchDisconnect Action: GetTickCount AbmeldeZeit ! GET-CUR-TIME LOG: %raslogname% "%WW% %DD% %hh%:%mm%:%ss% disconnect %LAST-CONNECTION% %ConnTimeInSec% %ConnTimeInMin%" )# ############################################################################## # Diese Aufgabe logt Internet Aktivität für Win9x/ME #( CONNECT-ACTIVITY VARIABLE CONN-BUSY VARIABLE CONN? 0 VALUE BEGIN-CONN-TIME 0 VALUE CONN-TIME CREATE (LAST-CONNECTION) 256 ALLOT : LAST-CONNECTION (LAST-CONNECTION) COUNT ; Rule: CONN-BUSY @ 0= Action: CONN-BUSY ON BEGIN ONLINE? IF CONN? @ 0= IF CONN? ON CONNECTION (LAST-CONNECTION) PLACE GET-CUR-TIME TimeSec@ TO BEGIN-CONN-TIME LOG: "ras.log" "%WW% %DD%/%MM%/%YYYY% %hh%:%mm%:%ss% connect %LAST-CONNECTION%" THEN ELSE CONN? @ IF CONN? OFF GET-CUR-TIME TimeSec@ BEGIN-CONN-TIME - TO CONN-TIME LOG: "ras.log" "%WW% %DD%/%MM%/%YYYY% %hh%:%mm%:%ss% disconnect %LAST-CONNECTION% %CONN-TIME%" THEN THEN 2000 PAUSE AGAIN )# ############################################################################## # Windows Scripting Host Beispiele (! Hier ist // ein Kommentar) #( the-bat-start Time: 0 8,12 * * * * Action: var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run("\"e:\\win\\the bat!\\thebat.exe\" /NOLOGO"); WScript.Sleep(1000); // warte eine Sekunde WshShell.AppActivate("The Bat!"); WScript.Sleep(1000); WshShell.SendKeys("{F2}"); // Überprüfe auf neue Nachrichten )# #( find-RunOnce-parameter Time: 0 12 * * 5 * Action: var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run("regedit.exe"); WScript.Sleep(1000); WshShell.AppActivate("Registry Editor"); WScript.Sleep(1000); WshShell.SendKeys("^fRunOnce{ENTER}"); )# ############################################################################## # Überwachung des Einlegens/Rausnehmens einer CD-Rom # cdslow.exe ist ein Programm zur Verringerung der Geschwindigkeit der CD-Rom Laufwerke. # 'F' ist der Buchstabe meines CD-Rom Laufwerkes. #( CDinsert WatchDriveInsert: F Rule: PROC-EXIST: cdslow.exe NOT Action: START-APP: E:\win\progs\CDSlow\cdslow.exe )# #( CDremove WatchDriveRemove: F Rule: PROC-EXIST: cdslow.exe Action: WIN-CLOSE: "CDSlow 1.5" )# ############################################################################## # Beispiel einer Abfrage eines Internet eMail Kontos. # Diese Aufgabe informiert Sie, wenn Sie neue eMails haben. #( check-new-mail VARIABLE prev-pop3-cnt Rule: \ Lese letzten Counter aus Datei PAD 10 S" pop3cnt.txt" FREAD S>NUM prev-pop3-cnt ! \ überprüfe eMails POP3-CHECK: serv name pass DUP prev-pop3-cnt @ <> IF prev-pop3-cnt ! \ schreibe neuen Counter in Datei FILE-WRITE: pop3cnt.txt "%prev-pop3-cnt @%" TRUE ELSE DROP FALSE THEN Action: MSG: "Sie haben neue eMails." )# ############################################################################## # SEND-KEYS: Beispiele #( test-send-keys RunOnce NoDel Action: ShowNormal START-APP: notepad.exe HINT: "%crlf%Bitte während des Tests nicht die Tasten und nicht die Maus bewegen.%crlf% " 1000 PAUSE SEND-KEYS-DELAY: 50 1000 SEND-KEYS: "Well, show me the way{ENTER}To the next whiskey bar{ENTER}Oh, don't ask why{ENTER}Oh, don't ask why{ENTER}{ENTER}" SEND-KEYS: "Show me the way{ENTER}To the next whiskey bar{ENTER}Oh, don't ask why{ENTER}Oh, don't ask why{ENTER}{ENTER}" SEND-KEYS: "For if we don't find{ENTER}The next whiskey bar{ENTER}I tell you we must die{ENTER}I tell you we must die{ENTER}I tell you, I tell you{ENTER}I tell you we must die{ENTER}{ENTER}" SEND-KEYS: "This is the END.{ENTER}" SEND-KEYS: "Keine Angst. Notepad wird gleich geschlossen ohne zu speichern.{ENTER}" SEND-KEYS: "{LEFT}+({HOME})" SEND-KEYS: "^{INSERT}" SEND-KEYS: "{END}{ENTER}{ENTER}+{INSERT}!!!{ENTER}{ENTER}3 seconds..." 3000 PAUSE SEND-KEYS: "{ENTER}Warten Sie nocheinmal 5 Sekunden. Dann wird ALT+F4 gesendet." SEND-KEYS: "{ENTER}{ENTER}Dann wird einmal Pfeiltaste Rechts, und dann ENTER gedrückt. Isn´t it magic?{ENTER}" SEND-KEYS: "5," 1000 PAUSE SEND-KEYS: "4," 1000 PAUSE SEND-KEYS: "3," 1000 PAUSE SEND-KEYS: "2," 1000 PAUSE SEND-KEYS: "1, GO." 1000 PAUSE SEND-KEYS: "@{F4}{DELAY 2000}{RIGHT}{DELAY 3000}{ENTER}" 2000 PAUSE HINT-OFF )# ############################################################################## # 'WatchHotKey' und 'WIN-TO-TRAY' # Diese Aufgabe minimiert das Aktive Fenster beim drücken von 'ALT+STRG+T' # inden System Tray. Stellen Sie sicher das das 'win2tray.spf' Plugin geladen wurde. #( Minimize2Tray WatchHotKey: "@^t" \ Tasten ALT+STRG+T gleichzeitig drücken Action: WIN-TO-TRAY: %GetForegroundWindow% )# ############################################################################## # Monitor abschalten. #( Strom_sparen 600 CONSTANT IdleTime \ Leerlaufzeit Konstante in Sekunden VARIABLE SaveMonFlg \ aktiviere Flag Rule: IdleTime IDLE DUP 0= IF SaveMonFlg OFF THEN PROC-EXIST: DivX_Player.exe 0= AND \ Monitor NICHT abschalten PROC-EXIST: FlyVCD.exe 0= AND \ wenn gerade ein Videoplayer läuft PROC-EXIST: microdvd.exe 0= AND SaveMonFlg @ 0= AND Action: SaveMonFlg ON \ setzt das Aktivierungs- Flag MONITOR-LOW \ schaltet den Monitor in den Stromsparmodus IdleTime 1000 * PAUSE \ warte ein weiteres Intervall IdleTime 3 * 2 / IDLE IF MONITOR-OFF THEN \ schaltet den Monitor ab )# ############################################################################## # Diese Aufgabe kann das 'Now-playing' Plugin von Winamp 2.xx ersetzen: # Es wird der Titel des gerade abgespielten Liedes in Winamp # in eine Benutzerspezifizierte Textdatei geschrieben. #( general_now_playing \ Vergiss nicht 'Scroll song title in the Windows taskbar' \ in den Winamp Optionen abzuschalten \ NoActive SingleInstance <( : NP_TEXT S" np: " ; : STOPPED_TEXT S" [stopped]" ; : PAUSED_TEXT S" [paused]" ; : NP_FILE S" d:\TOOLS\WINAMP\np.txt" ; VARIABLE WINAMP_STATUS CREATE WINAMP_TITLE 256 ALLOT CREATE WINAMP_NEW_TITLE 256 ALLOT )> Time: * Also WatchProc: "winamp.exe" Rule: PROC-EXIST: "winamp.exe" Action: BEGIN WIN-EXIST: "Winamp v1.x" WHILE \ Hole Musiktitel von Winamp window caption. \ Passen sie dieses RegEx auf ihre Bedürfnisse an: RE-MATCH: "%FOUND-WINDOW%" "/\d+\. (.*) - Winamp/" IF 104 0 1024 WIN-HWND SendMessageA WINAMP_STATUS ! WINAMP_STATUS @ 3 = IF S" %$1%%PAUSED_TEXT%" EVAL-SUBST WINAMP_NEW_TITLE PLACE ELSE WINAMP_STATUS @ 1 <> IF S" %$1%%STOPPED_TEXT%" EVAL-SUBST WINAMP_NEW_TITLE PLACE ELSE $1 WINAMP_NEW_TITLE PLACE THEN THEN WINAMP_NEW_TITLE COUNT WINAMP_TITLE COUNT COMPARE IF WINAMP_NEW_TITLE COUNT WINAMP_TITLE PLACE FILE-WRITE: "%NP_FILE%" "%NP_TEXT%%WINAMP_NEW_TITLE COUNT%" THEN THEN \ Passen sie die Pause auf ihre Bedürfnisse an PAUSE: 4000 REPEAT \ Leere 'np.txt' wenn Winamp inaktiv ist. \ Sie könnten etwas in dieser Art benutzen: \ FILE-WRITE: "%NP_FILE%" "%NP_TEXT%Winamp ist nicht Aktiv" FILE-WRITE: "%NP_FILE%" " " )# ############################################################################## # Diese Aufgabe schreibt ihre OS Version und die SystemStartZeit in eine Datei. #( test_uptime_counter \ NoActive \ Settings: --------------------------------------------------------- \ Uptime filename: : uptime_filename S" c:\uptime.txt" ; \ ------------------------------------------------------------------- 0 VALUE UPTIME_DAYS 0 VALUE UPTIME_HOURS 0 VALUE UPTIME_MINUTES 0 VALUE UPTIME_SECONDS 0 VALUE ver_minor 0 VALUE ver_major 0 VALUE ver_platform : win_platform ver_platform 2 = IF ver_major 4 = IF S" NT" ELSE ver_minor 0 = IF S" 2000" ELSE S" XP" THEN THEN ELSE ver_major 4 = IF ver_minor 0 = IF S" 95" ELSE ver_minor 10 = IF S" 98" ELSE S" ME" THEN THEN THEN THEN ; : time_count GetTickCount 1000 / DUP >R 60 MOD TO UPTIME_SECONDS R> 60 / DUP >R 60 MOD TO UPTIME_MINUTES R> 60 / DUP >R 24 MOD TO UPTIME_HOURS R> 24 / TO UPTIME_DAYS ; \ starte alle 5 Minuten wenn zumindest ein eMail-Programm läuft Time: */5 Rule: PROC-EXIST: "thebat.exe" PROC-EXIST: "Xnews.exe" PROC-EXIST: "gedcyg.exe" OR OR Action: GET-VER TO ver_platform TO ver_major TO ver_minor time_count FILE-WRITE: "%uptime_filename%" "OS: Windows %win_platform% (%ver_major%.%ver_minor%)%crlf%System Up Time: %UPTIME_DAYS% days, %UPTIME_HOURS% hours, %UPTIME_MINUTES% minutes, %UPTIME_SECONDS% seconds" )# ############################################################################## # Diese Aufgabe zählt die Tage (Monate, Jahre) seit/bis zu einem gegebenem Datum # und schreibt das Ergebnis in eine Datei. : day_spelling 1 = IF S" day" ELSE S" days" THEN ; : day_counter 2SWAP PAD ZPLACE >R >R YMD>DATE CUR-DATE DATE- DUP 0< IF NEGATE THEN DUP N>S PAD +ZPLACE day_spelling PAD +ZPLACE PAD ASCIIZ> R> R> FWRITE ; #( test_day_counter OnceADay Action: 2002 12 31 S" Das Neue Jahr beginnt in " S" c:\temp\day_count.txt" day_counter )# ############################################################################## # Diese Aufgabe gibt eine kleine Melodie über den PC-Lautsprecher aus # und zeigt dabei den Liedtext als PopUp (ursprünglich in Russisch) # Ich habe hier etwas in Deutsch eingefügt. Das passt zwar nicht zur Melodie, # aber... die russischen Zeichen kann ihr Computer nicht anzeigen. #( music_through_speaker Action: BEEP: 30 247 HINT-POS: 100 100 THINTW: "nnCron karaoke:" 3 THINTW: "Bist du bereit?.." 2 HINT-POS: 100 100 HINT: "...Alle meine Entchen..." PAUSE: 200 BEEP: 280 330 \ Note 'E' PAUSE: 5 BEEP: 105 330 \ E PAUSE: 100 BEEP: 280 330 \ E PAUSE: 5 BEEP: 105 330 \ E HINT-OFF \ letztes PopUp ausblenden HINT-POS: 100 100 \ neue PopUp Position HINT: "...schwimmen auf dem See..." \ PopUp Text PAUSE: 70 BEEP: 20 294 \ D PAUSE: 10 BEEP: 290 349 \ F BEEP: 200 392 \ G PAUSE: 10 BEEP: 280 440 \ A BEEP: 120 262 \ C HINT-OFF \ letztes PopUp ausblenden HINT-POS: 100 100 \ neue PopUp Position HINT: "...schwimmen auf dem See..." \ PopUp Text PAUSE: 80 BEEP: 320 349 \ F BEEP: 180 440 \ A BEEP: 500 392 \ G PAUSE: 1000 HINT-OFF HINT-POS: 100 100 HINT: "...Köpfchen in das Wasser..." PAUSE: 450 BEEP: 280 330 \ E BEEP: 110 294 \ D PAUSE: 400 HINT-OFF HINT-POS: 100 100 HINT: "...Schwänzchen in die Höh´..." PAUSE: 670 BEEP: 20 247 \ B PAUSE: 10 BEEP: 280 262 \ C BEEP: 110 247 \ B PAUSE: 80 HINT-OFF BEEP: 280 220 \ A BEEP: 110 330 \ E PAUSE: 1000 BEEP: 30 247 HINT-POS: 100 100 THINT: "Danke schön!" 3 )# ############################################################################## # Diese Aufgabe zählt, wie lange ein spezieller Benutzer schon am PC arbeitet. # Die Minuten werden in einer speziellen LogDatei festgehalten. Wenn dieser # spezielle Benutzer länger als 60 Minuten am Tag arbeitet, erscheint ein Hinweistext. #( log_minutes VARIABLE minutes_count Action: USERNAME S" user_logon_name" COMPARE 0= IF PAD 10 S" f:\user_log\%DD%-%MM%-%YY%.cnt" EVAL-SUBST FREAD S>NUM minutes_count ! minutes_count @ 61 < IF minutes_count 1+! FILE-WRITE: "c:\user_log\%DD%-%MM%-%YY%.cnt" "%minutes_count @%" ELSE MSG: "Das ist genug! Schalte deinen Computer jetzt aus." THEN THEN )# ############################################################################## # Diese Aufgabe erinnert dich an Geburtstage deiner Freunde. # Erstelle einfach eine Textdatei 'Geburtstage.txt' # mit dem folgenden Inhalt, für jeden Tag eine eigene Zeile # (Natürlich dann ohne das #-Zeichen): # # 1968 02 08 Nemtsev Nicholas # 1968 06 28 Kondakoff Valery # 1955 10 28 Gates Bill # #( Geburtstage OnceADay <( : Geburtstage.txt S" Geburtstage.txt" ; VARIABLE fb CREATE bline 256 ALLOT CREATE bname 64 ALLOT VARIABLE bdate VARIABLE byears VARIABLE bdays \ Starte Erinnerungs- Tage vor dem Geburtstag (pre-period) 5 CONSTANT pre-period )> Action: Geburtstage.txt R/O OPEN-FILE-SHARED IF DROP ERR-MSG: "Kann %Geburtstage.txt% nicht öffnen" EXIT THEN fb ! BEGIN bline 250 fb @ READ-LINE THROW WHILE bline SWAP DATE bdate ! Year@ SWAP - byears ! 1 WORD COUNT 63 MIN bname PLACE CUR-DATE bdate @ DATE- NEGATE DUP 0 > OVER pre-period < AND IF bdays ! MSG: "ACHTUNG Geburtstag !!!%crlf%%bname COUNT%%crlf%Erinnerungs Tage: %bdays @%.%crlf%Alter: %byears @%.%crlf%Vergiss nicht eine Glückwunschkarte zu schicken!" \ Hier irgendetwas sinnvolles, z.B. eine Melodie ausgeben, oder ... ELSE DROP THEN TIB> REPEAT DROP fb @ CLOSE-FILE DROP )#.