# 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
)#.