#include UserSettings.ini [General] Debug=198 SysFonts=1 Options=4 ; Options: Set [DeleteApps DeleteMacs Ignored Reserved Append Convert Overwrite] FileColor=128 NoKeyEsc=1 ClipCopyAmount=0 CRLFConv=0 Paragraphs=0 HintDelay=1800 NoSplash=0 TrayClick=0 NoEscPrefix=1 ShiftState=1 Proportional=0 KbdClick=1 ShowTrayIcon=1 PinPos=1,400,400 Language=de Wordwrap=1 EditFontSize=8 CommandMode=1 Version=3.5.9.3 Position=167,150,462,554 WindowColor=16777215 Sorting=ANSI ; Change this to "numeric" for sorting by character value EditorPos=13, 248, 861, 453 OpenWindow=1 ProxyServer= UseIEProxy=0 ReplaceBaseIni=0 ShowTooltips=1 ReadFtp=0 WriteFtp=0 DictFtp=0 FtpPassive=1 FtpHost= FtpDir=/ FtpUser= FtpPwd= UseProxy=0 Programs=Notepad ("Notepad.exe"),Wordpad ("Wordpad.exe") MacroExecPwd= PasswordColor=16766666 DialogColor=-2147483633 SyncMethod=FTP NetDrivePath= LargerListFont=0 SplitterPos=206 ShowSplitter=1 TEditorPos=136, 190, 738, 586 TParagraphs=0 TProportional=0 TWordwrap=1 TSplitterPos=300 TShowSplitter=1 TEditFontSize=8 NoMsgRestriction=0 NoMsgContextMenu=1 FlushInterval=20 CheckUpdate=1 RestoreUpdates=1 ShowRecInd=0 ShowFtpInd=1 ProxyUser= ProxyPwd= AutoVerify=1 UpdateStatus=0 Urls=http://www.typer.de,http://www.viebke.info ModulePath=/modules.sc CheckUpdateIndex=1 LastUpdate= 3.98490933912037E+0004 UseProxyList=1 Withdraw=0 [Completion] Completion=1 DictionaryFile=Dict.txt DefaultWords=allerdings, andererseits, besonderen, insbesondere, beispielsweise StopWords=diese, diesem, diesen, dieser, dieses, ganze, ganzem, ganzen, ganzer, ganzes, selten, unser Syllables=mit, bei, ent, über, unter, weiter, heraus, zer, gegen, trans, inter, edel, sonder, hyper, schwarz, blau, grün Delimiters=%()[]{}<>="' SpaceCharacters=_ DefPriority=0 AlwaysShow=0 FollowUps=1 Rollover=1 ExtendedSearch=1 Abbreviation=1 SubWords=1 Resolve=121,0 IgnoreBuffer=0 PhraseDelimiters=.,;:!? [MacroFiles] Number=0 [WinAppRegs] Number=0 [ErrorLog] Position=463,55,391,223 ErrorLevel=3 MaxErrors=200 [Recording] Position=496, 77, 460, 252 MonitorPos=500,200 BufferWarning=1 ShowRecMon=1 [Updates] Denied=0 [Apps] Number=3 AppDelay=800 Resolve=122,0 A2=ex ,Explorer.exe,, A3=np ,Notepad.exe,, A1=da ,*Datum in Textfenster einfügen,,\[+c]¤parse(macro("#da"));¤exit; [Macros] Number=31 Resolve=118,0 ClearQueue=1 KeyShortcuts=1 PasteText=0 SortMacros=1 ResortSysMacros=1 MaxDiff=800 MinDiff=800 Delay=10 KeyDelay=5 Repeat=2 Wildcards=1 M1=33224,@ff0000* C1=53,Textbausteine H1=0,0 P1= M2=138,#b\[+c]¤¤NAME:=input("","Enter the name of the environment:")¤Result:="\\begin\{"+$NAME+"\}\n\ \n\b\b\\end\{"+$NAME+"\}\u";¤echo Result;¤* C2=113,Insert begin-end with prompt H2=85,6 P2= M3=202,#da\[+c]¤// Ort und Datum ausgeben¤// ----------------------¤¤echo "Musterstadt, "+date("d. mmmm yyyy")+"\n";¤return;* C3=53,Ort und Datum H3=0,0 P3= M4=202,#em\[+c]¤¤// Bei längeren Texten empfiehlt es sich, einen Textblock zu¤// definieren - wie in diesem Makro.¤// ---------------------------------------------------------¤¤\[+t ADR]¤Egon Mustermann¤Musterstr. 1¤99999 Musterstadt¤\[-t]¤¤// Den Textblock ADR plus abschließende Enter-Taste ausgeben.¤¤print ADR+chr(13);¤* C4=65,Eigene Anschrift H4=0,0 P4= M5=202,#kb\[+c]¤¤// Dieses Makro definiert zunächst drei Anreden, aus denen Sie¤// eine auswählen können. Dann wird (außer bei der dritten Anrede)¤// der Name abgefragt. Zum Schluss werden die Anrede und ein¤// vordefinierter Text TEXT ausgegeben.¤// ---------------------------------------------------------------¤¤lists (ANREDEN,ABSCHLUSS)¤ "Sehr geehrte Frau " ""¤ "Sehr geehrter Herr " ""¤ "Sehr geehrte Damen und Herren" ",\n\n"¤;¤¤if !select(ANREDEN,"Anrede:") return; // Abgebrochen?¤¤// Wenn nicht die dritte Anrede ausgewählt wurde, dann ¤// den Namen abfragen.¤¤if (ANREDEN[1]!=3) {¤ if !(NAME:=input("","Name:")) return; // Abgebrochen?¤ }¤¤// Die Anrede plus Abschluss derselben ausgeben. Die gewählte¤// Anrede wird durch die Auswahl zur ersten in der Liste.¤¤echo $ANREDEN[1]+ABSCHLUSS[ANREDEN[1]];¤if defined("NAME") echo $NAME+",\n\n";¤¤// Hier steht der Text, der auf die Anrede folgt.¤¤\[+t TEXT]¤vielen Dank für die Zusendung der Ausschreibungsunterlagen. Wir werden Ihre Anfrage so schnell wie möglich beantworten.¤¤Mit freundlichen Grüßen¤Hans Mustermann¤\[-t]¤¤lprint TEXT;¤return;¤* C5=85,Kurzbrief mit Abfrage H5=0,0 P5= M6=270,#mfgMit freundlichen Grüßen,¤* C6=137,Mit freundlichen Grüßen (Nur Text) H6=0,0 P6= M7=202,#sb\[+c]¤// Ein (zugegebenermaßen unrealistisches) Beispiel für einen¤// Serienbrief. Es zeigt, wie man Datensätze gleicher Größe¤// (hier jeweils 5 Felder) verarbeiten kann.¤// ---------------------------------------------------------¤¤list A ¤ "Hans Muster"¤ "Musterstr. 1"¤ "09999 Musterstadt"¤ "0999 99 99 99"¤ "Sehr geehrter Herr Muster"¤ ¤ "Gabriele Beispiel"¤ "Beispielweg 11"¤ "08888 Beispielen"¤ "0888 88 88 88"¤ "Sehr geehrte Frau Beispiel"¤ ;¤¤SIZE:=5;¤COUNT:=A/SIZE;¤repeat (Z,COUNT) {¤ B:=(Z-1)*SIZE;¤ echo(A[B+SIZE]+',\n\n');¤ echo('wir möchten Sie hiermit darauf hinweisen, dass wir Ihre Anschrift \¤ in unserer Datenbank wunschgemäß geändert haben. Sie lautet nun:\n\n');¤ echo(' ',A[B+1],'\n ',A[B+2],'\n ',A[B+3],'\n\n');¤ echo('Ihre Telefonnummer lautet ',A[B+4],'.\n');¤ echo('\nMit freundlichen Grüßen\nIhre Hausverwaltung\n\^\n');¤}¤* C7=45,Serienbrief H7=0,0 P7= M8=266,#sg*\[+c]¤// Noch ein Makro zur Ausgabe einer Anrede. Hier werden die Zeichen¤// ausgewertet, die anstelle von * im Kürzel eingegeben wurden, also¤// "f", "h" oder "dh", um eine von drei Anreden auszuwählen.¤// -----------------------------------------------------------------¤¤if !pos(' '+SUFFIX+' ',' f h dh ') {¤ beep;¤ S:=popup(("Sehr geehrte Frau ",¤ "Sehr geehrter Herr ",¤ "Sehr geehrte Damen und Herren,"));¤ if S<>-1 echo(S);¤ exit;¤ }¤case "f" echo("Sehr geehrte Frau ");¤case "h" echo("Sehr geehrter Herr ");¤case "dh" echo("Sehr geehrte Damen und Herren,\n\n");¤* C8=141,Sehr geehrte... (#sgf, #sgh, #sgdh) H8=0,0 P8= M9=266,#sig\[+c]¤// Dieses Makro definiert Komponenten einer Signatur. Kombinationen¤// dieser Komponenten werden dem Benutzer zur Auswahl angeboten.¤// Anschließend gibt das Makro die gewählte Kombination aus.¤// ----------------------------------------------------------------¤¤\[+t NAME]¤Martin Mustermann¤\[-t]¤¤\[+t ANSCHRIFT]¤Musterstr. 1¤D-99999 Musterstadt¤\[-t]¤¤\[+t BANK]¤Konto 99999999, Musterbank, BLZ 99999999¤\[-t]¤¤\[+t TELEFON]¤+49 99 999999999¤\[-t]¤¤\[+t FAX]¤+49 99 777777777¤\[-t]¤¤\[+t WEB]¤http://www.mustermann.zz¤\[-t]¤¤ENTER:=chr(13);¤¤// Gleiche Namen wie oben verwenden!¤list ADR¤ "Anschrift, Telefon, Web"¤ "Anschrift, Telefon, Fax"¤ "Anschrift, Bank"¤ "Anschrift, Fax, Bank"¤ "Name, Anschrift, Telefon, Fax, Web, Bank"¤;¤¤SIG:=select(ADR,"Bitte Signaturdaten auswählen:","Signaturdaten");¤if (!SIG) halt;¤A[]:=explode(ADR[1]);¤repeat (I,A) A[I]:=[trim(A[I])];¤print "-- "+$ENTER+string(A,ENTER)+$ENTER;¤exit;¤* C9=41,Signaturen H9=0,0 P9= M10=266,#std\[+c]¤// Dieses Makro zeigt, wie man in einem Textblock (hier BRIEF)¤// Felder ($VORNAME usw.) nach Auswahl eines Datensatzes durch die¤// entsprechenden Werte ersetzt und den Textblock dann über die¤// Zwischenablage ausgibt.¤// ----------------------------------------------------------------¤¤FELDER[]:=("VORNAME","NACHNAME","ANREDE","STR","PLZ","ORT");¤¤lists (NACHNAME,VORNAME,ANREDE,STR,PLZ,ORT)¤ "Muster", "Hans", "Sehr geehrter Herr", "Musterstr. 1", "09999", "Musterstadt"¤ "Erde", "Frank", "Sehr geehrter Herr", "Mondstr. 5", "X-012", "Universum"¤ "Beispiel", "Gabriele", "Sehr geehrte Frau", "Beispielweg 11", "08888", "Beispielen"¤ ;¤¤// Neue Liste für Auswahl zusammenbauen¤¤L[]:=();¤repeat (I,VORNAME) {¤ L.add(VORNAME[I]+", "+NACHNAME[I]+", "+PLZ[I]+" "+ORT[I]);¤ }¤¤if !select(L,"","Bitte Adressaten wählen:") {¤ beep;¤ exit;¤ }¤¤DATENSATZ_NR:=+L[1];¤¤\[+t BRIEF]¤$ANREDE $NACHNAME,¤¤wir danken Ihnen für Ihre Anmeldung in unserem Shop und möchten Ihnen ¤hiermit einen Einkaufsgutschein im Wert 2 EUR überreichen. Dieser ¤Gutschein kann bis 31.12.2009 bei einer Bestellung in Höhe von 300 EUR¤oder mehr eingelöst werden. Er ist nur für Sie persönlich bestimmt. ¤Bitte überprüfen Sie die bei uns gespeicherten Adressdaten:¤¤$VORNAME $NACHNAME¤$STR¤$PLZ $ORT¤¤Bei Unstimmigkeiten bitten wir Sie, Ihre Daten in unserem Shop¤zu korrigieren.¤¤Mit freundlichen Grüßen¤Ihr Karl-Heinz Shopinhaber¤-- ¤www.autotype.de¤\[-t]¤¤¤repeat (I,FELDER) {¤ VARIABLE:="$"+FELDER[I];¤ WERT:=[$FELDER[I]+"["+DATENSATZ_NR+"]"];¤ BRIEF:=replace(BRIEF,VARIABLE,WERT);¤ }¤¤clip(newlines(BRIEF));¤echo("\w2\^v");¤exit;¤* C10=53,Standardbrief H10=0,0 P10= M11=266,#sz*\[+c]¤// Dieses Makro bietet dem Benutzer Sonderzeichen ¤// zur Auswahl an und gibt das gewählte aus.¤// ----------------------------------------------¤¤RESULT:="";¤lists (KEYS,SZ)¤ ">" "»"¤ "<" "«"¤ "." "•"¤ "tm" "™"¤ "c" "©"¤ "a" "ª"¤ "r" "®"¤ "1" "¹"¤ "2" "²"¤ "3" "³"¤ "o" "º"¤ "1/4" "¼"¤ "1/2" "½"¤ "3/4" "¾"¤ "p" "£"¤ "e" "é"¤ "o" "ó"¤ "u" "¯"¤ "cent" "¢"¤ "eur" "€"¤ "mikro" "µ"¤ "schnitt" "ø"¤ "para" "§"¤ "frage" "¿"¤;¤repeat (Z,KEYS) {¤ case KEYS[Z] RESULT:=SZ[Z];¤ break;¤}¤if (RESULT="") {¤ P:=popup(KEYS);¤ if P=-1 halt;¤ RESULT:=SZ[index(KEYS,P)];¤}¤print RESULT;¤* C11=53,Sonderzeichen H11=0,0 P11= M12=207,#ttVersion.txt* C12=105,Datei Version.txt ausgeben H12=0,0 P12= M13=264,#url\[+c]¤¤// Noch ein Makro, das Texte zur Auswahl anbietet und ausgibt.¤// -----------------------------------------------------------¤¤lists (NAMES,URLS) ¤ "typer.de" "http://www.typer.de/",¤ "denic.de" "http://www.denic.de/",¤ "metager.de" "http://www.metager.de/"¤ ;¤¤URL:=popup(NAMES);¤if (URL=-1) {¤ beep;¤ return;¤ }¤¤URL:=index(NAMES,URL);¤if URL print(URLS[URL]);¤* C13=49,URL ausgeben H13=0,0 P13= M14=328,float\[+c]¤// Beispielmakro, das zeigt, wie man Variablen dauerhaft in einer¤// Datei speichert und wieder einliest. Die erste Variable (A) ist¤// eine Fließkommazahl (PI), die zweite (B) eine Ganzzahl (2)¤// ---------------------------------------------------------------¤¤function savevars(V,PATH) {¤ VL[]:=V[];¤ j:=VL;¤ for (i:=1; (i<=j); ++i) {¤ if isfloat(*(VL[i])) {¤ VL.add(sci(*(VL[i]),10));¤ }¤ else VL.add(*(VL[i]));¤ }¤ save(VL,PATH);¤}¤function loadvars(PATH) {¤ VL[]:=load(PATH);¤ for (i:=1; (i<=(VL/2)); ++i) {¤ *(VL[i]):=[replace(VL[i+VL/2],',','.')];¤ }¤}¤¤P:=getenv("TEMP")+"\vars.txt";¤A:=PI; B:=2;¤savevars("A B",P);¤A:=0; B:=0;¤loadvars(P);¤lprint A;¤lprint B;¤* C14=189,Beispiel zur dauerhaften Speicherung von Zahlen H14=0,0 P14= M15=72,*\[+c]¤// Dieses Makro mit dem Spezialkürzel * fängt den Fall ab, dass¤// kein Kürzel passt. Löschen Sie es, wenn es Sie stört.¤// ------------------------------------------------------------¤¤arrays (KEYS,NAMES)¤ "mail" "muster@mustermann.de"¤ "ggf" "gegebenenfalls"¤ "bsp" "beispielsweise"¤ "anf" "vielen Dank für Ihre Anfrage!"¤ "mfg" "Mit freundlichen Grüßen\nMustermann"¤ ;¤¤if (IDX:=index(KEYS,SUFFIX)) {¤ S:=NAMES[IDX];¤ if KEYS[IDX][1]!=SUFFIX[1] S[1]:=upper(S[1]);¤ echo(S);¤ exit;¤ }¤¤if (S:=popup(NAMES))!=-1 echo(S);¤* C15=105,Catch all (letztes Makro!) H15=0,0 P15= M16=33224,@0000ce* C16=49,Systemmakros H16=0,0 P16= M17=328,$copy\[+c]¤// Dieses Makro wird ausgeführt, wenn Text in die¤// Zwischenablage kopiert wird.¤// ----------------------------------------------¤¤// play(BASEDIR+"Sounds\Click1.wav");¤¤// Hier wird noch ein weiteres Makro ausgeführt:¤¤if (IDX:=macroindex("$copy.")) parse(macrotext(IDX));¤* C17=205,Wird beim Kopieren in die Zwischenablage ausgeführt H17=0,0 P17= M18=520,$default* C18=125,Wird vor jedem Makro ausgeführt H18=0,0 P18= M19=328,$exit\[-o+c]¤// Dieses Makro sichert beim Beenden von ShortCut¤// den Textpuffer und den Text in der Zwischenablage im¤// Anwendungsdaten\ShortCut-Verzeichnis des Benutzers.¤// Sofern verfügbar, wird das Passwort des beim Start¤// zuletzt geladenen verschlüsselten Makros verwendet.¤¤if (!defined('_PASS')) global _PASS:='';¤if (length(_PASS)<6) global _PASS:="ShortCut";¤if (length(_PASS)>=6) {¤ save(encrypt(squeeze(trim(textbuffer())),_PASS),HOMEDIR+"Buffer.txt");¤ if (length(BUF:=clip())!=0)¤ save(encrypt(squeeze(trim(BUF)),_PASS),HOMEDIR+"Clipbrd.txt");¤ }¤¤// Ein zusätzliches Makro ausführen, falls vorhanden:¤¤if (IDX:=macroindex("$exit.")) parse(macrotext(IDX));¤* C19=113,Wird beim Beenden ausgeführt H19=0,0 P19= M20=328,$init\[-o+c]¤// Dieses Makro wird beim Start von ShortCut ausgeführt. Es¤// sichert zuerst die aktuelle Konfiguration im temporären¤// Verzeichnis.¤// Dann liest es den Textpuffer und den Text für die Zwischen-¤// ablage aus dem Anwendungsdaten\ShortCut-Verzeichnis des¤// Benutzers. Sofern die entsprechenden Dateien verschlüsselt¤// sind, versucht das Makro sie zu entschlüsseln. Hierfür wird¤// das Passwort des zuletzt geladenen verschlüsselten Makros ¤// verwendet, sofern verfügbar. Andernfalls wird als Passwort¤// "ShortCut" verwendet.¤// ------------------------------------------------------------¤¤// Zuerst ein Backup der Konfiguration machen¤¤DIR:=getenv("TEMP");¤if direxists(DIR+"\ShortCut") DIR:=DIR+"\ShortCut";¤¤if direxists(DIR) {¤ F[]:=filelist(HOMEDIR+"ShortCut.*");¤ repeat (I,F) {¤ T:=DIR+"\"+date("yyyymmdd-hhmmss-")+filename(F[I]);¤ copyfile(F[I],T);¤ NL:=chr(13)+chr(10);¤ if exists('c:\winnt\bin\touch.exe')¤ console('cmd.exe','c:\winnt\bin',1,'touch '+T+NL);¤ }¤ }¤ ¤// Textpuffer und Zwischenablage einlesen¤¤global _PASS:='';¤MACS[]:=macrolist();¤repeat (M,MACS) {¤ P:=macropassword(MACS[M]);¤ if (P<>'') global _PASS:=P;¤ }¤if (length(_PASS)<6) global _PASS:="ShortCut";¤if (length(_PASS)>=6) {¤ BUF:=file(HOMEDIR+"Buffer.txt");¤ if (S:=decrypt(BUF,_PASS)) textbuffer(S);¤ else {¤ if (S:=decrypt(BUF,"ShortCut")) textbuffer(S);¤ }¤ BUF:=file(HOMEDIR+"Clipbrd.txt");¤ if (S:=decrypt(BUF,_PASS)) clip(S);¤ else {¤ if (S:=decrypt(BUF,"ShortCut")) clip(S);¤ }¤ }¤¤// Zusätzliche Makros ausführen, falls vorhanden¤¤foreach FUNC ("$functions","$init.") {¤ if (IDX:=macroindex($FUNC)) parse(macrotext(IDX));¤ }¤¤return;¤* C20=105,Wird beim Start ausgeführt H20=0,0 P20= M21=392,$match\[+c]¤// Hier können Sie bei Bedarf Ihre eigene Vervollständigungs-¤// funktion implementieren.¤// ----------------------------------------------------------¤¤complete(popup(match(lastword())));¤* C21=213,Wird bei ausgeschalteter Vervollständigung ausgeführt H21=0,0 P21= M22=520,$nomacro\[+c]¤// Wenn der Hotkey zur Kürzelauflösung gedrückt wurde, die¤// letzte Eingabe jedoch kein Kürzel war, dann wird dieses¤// Makro ausgeführt. Löschen Sie es, wenn Sie es nicht¤// benötigen oder ersetzen Sie es durch die Anweisung beep;¤// ---------------------------------------------------------¤¤// Das Makro zeigt die Liste der verfügbaren Makros an und¤// führt das ausgewählte aus. Es nimmt an, dass Kürzel nicht¤// mehrfach vergeben wurden.¤¤MACS[]:=macrolist();¤for (I:=MACS; I!=0; --I) {¤ if (macroflags(+I)&16) delete(MACS,I);¤ }¤¤if (M:=popup(MACS))<>-1 {¤ L:=lastword();¤ if L=length(L) repeat L echo('\b');¤ parse(macro($M));¤ }¤* C22=141,Kein Kürzel bei manueller Auflösung H22=0,0 P22= M23=520,$nomatch\[+c]¤// Wenn die Vervollständigung kein Wort findet, versucht dieses¤// Makro es erneut, jedoch ab dem zweiten Buchstaben des zuletzt¤// eingegebenen Wortes. Dieses Wort muss mindestens 2 Zeichen¤// lang sein.¤// -------------------------------------------------------------¤¤if length(L:=lastword())<2 {¤ play(BASEDIR+"ShortCut.wav");¤ exit;¤}¤¤L:=substr(L,2,length(L)-1);¤S:=popup(match(L));¤¤// Wenn der Benutzer ein Wort ausgewählt hat, muss es komplett ¤// geschrieben und nicht nur der fehlende Teil ergänzt werden.¤// Deshalb wird der Rückgabewert 0 von popup() (Eingabetaste)¤// durch 1 (Rückschritt-Taste) ersetzt.¤¤if (S!="") {¤ if (S=0) #S:=1;¤ print(complete(S));¤ }¤* C23=157,Leere Wörterliste bei Vervollständigung H23=0,0 P23= M24=392,$paste\[+c]¤// Mit diesem Makro können Sie darauf reagieren, wenn Text¤// mit Strg-v aus der Zwischenablage eingefügt wurde.¤// ---------------------------------------------------------¤¤// play(BASEDIR+"Sounds\Click2.wav");¤¤// Hier wird noch ein weiteres Makro ausgeführt:¤¤if (IDX:=macroindex("$paste.")) parse(macrotext(IDX));¤* C24=209,Wird beim Einfügen aus der Zwischenablage ausgeführt H24=0,0 P24= M25=456,$record\[+c]¤option keydelay 10;¤option delayinterval 1;¤echo($$$);¤exit;¤* C25=105,Vorlage für Aufzeichnungen H25=0,0 P25= M26=584,$richtext\[+c]¤\[+t TXT]\[-t]¤clip(TXT,"Rich Text Format");¤echo("\w\^v");¤exit;¤* C26=157,Vorlage für RTF-Makro per Drag and Drop H26=0,0 P26= M27=712,$statistics\[-o+c]¤¤if (VERSION<3050705) {¤ message("Das Statistik-Makro erfordert mindestens Version 3.5.7.5");¤ exit;¤ }¤¤PageItems:=10; // Spalten pro Seite¤PageDir:=getenv("TEMP")+"\"; // Ausgabeverzeichnis¤FilePrefix:="Usage-"; // Präfix der Dateinamen¤FileTag:=$FilePrefix+date("yy-mm-dd-hh-nn-ss-"); // Kennzeichnung der Dateinamen¤DelOldFiles:=1; // Alte Statistikdateien löschen¤MacCols:=1; // Makros in den Spalten¤¤lists (Tasks,Cmds)¤ 'Computer statt Makros in den Spalten' '+(MacCols:=0);'¤ 'Systemmakros ($init, $copy usw.) löschen' '+statistics(5,"\$*");'¤ 'Nicht verwendete Makros löschen' '+statistics(6,1,date("dd.mm.yy",-60));'¤ 'Häufig verwendete Makros löschen' '+statistics(7,100,date("dd.mm.yy",-60));'¤ 'Rechner aufsteigend nach Makrozugriffen sortieren' 'COMPS[]:=statistics(22,CLACC,1);'¤ 'Rechner absteigend nach Makrozugriffen sortieren' 'COMPS[]:=statistics(22,CLACC,0);'¤ 'Rechner aufsteigend nach letztem Zugriff sortieren' 'COMPS[]:=statistics(24,CLACC,1);'¤ 'Rechner absteigend nach letztem Zugriff sortieren' 'COMPS[]:=statistics(24,CLACC,0);'¤ 'Makros aufsteigend nach Gesamthäufigkeit sortieren' 'HMACS[]:=statistics(10,HLACC,1);'¤ 'Makros absteigend nach Gesamthäufigkeit sortieren' 'HMACS[]:=statistics(10,HLACC,0);'¤ 'Makros aufsteigend nach letztem Zugriff sortieren' 'HMACS[]:=statistics(12,HLACC,1);'¤ 'Makros absteigend nach letztem Zugriff sortieren' 'HMACS[]:=statistics(12,HLACC,0);'¤;¤¤\[+t StartPage]¤¤¤ShortCut - Makro-Statistik¤¤

Statistik über den Gebrauch von ShortCut-Makros [$date]
¤© Andreas Viebke - Alle Rechte vorbehalten

¤\[-t]¤¤\[+t EndPage]¤¤\[-t]¤¤CR:=Chr(13)+Chr(10);¤¤function Pad(n) {¤ return fill(n,3,'0');¤ }¤¤function PageRange(n) {¤ m:=n*PageItems;¤ return ((n-1)*PageItems+1)+'-'+(m>L?L:m);¤ }¤¤function PageLink(n,txt) {¤ R:='';¤ if (txt!='') R:=R+$txt;¤ else R:=$R+PageRange(n);¤ return R+' ';¤ }¤¤function OtherPages(Current) {¤ Result:='';¤ if (PageCount>1) {¤ Result:=''+CR+'';¤ if (Current>1) ¤ Result:=Result+'';¤ else Result:=Result+'';¤ repeat (K,PageCount) {¤ if (K!=Current) ¤ Result:=Result+'';¤ else¤ Result:=Result+'';¤ }¤ if (Current'+¤ PageLink(Current+1,'>>')+'';¤ else Result:=Result+'';¤ Result:=Result+''+CR+'
'+¤ PageLink(Current-1,'<<')+' <<'+¤ PageLink(K,'')+''+¤ PageRange(K)+'>>
';¤ }¤ return Result;¤ }¤¤function FormatDate(dt) {¤ if (dt=0.0) return '--';¤ else return date(dt,'dd.mm.yy');¤ }¤¤function Calls(NC) {¤ SUM:=0; *NC:=0;¤ repeat (I,HMACS) {¤ if HMACS[I] inc(SUM,HMACS[I]);¤ else inc(*NC);¤ }¤ return SUM;¤ }¤¤function DelCats(&L1[],&L2[]) {¤ for (I::=L1; I<>0; --I) {¤ if L1[I][1]="@" {¤ delete(L1,I,1);¤ delete(L2,I,1);¤ }¤ }¤ }¤¤statistics(3,'*');¤statistics(4,'*');¤¤if !select(Tasks,'Wählen Sie die Aufgaben aus:') {¤ beep;¤ exit;¤ }¤¤if (DelOldFiles) {¤ F[]:=filelist($PageDir+FilePrefix+'*.html');¤ repeat (I,F) delete(F[I]);¤ }¤¤statistics(0,'*');¤J:=COMPUTERLIST*2;¤while ((COMPS[]:=statistics())Aufgaben 
';¤ repeat (J,Tasks) {¤ S:=$S+'';¤ }¤ S:=S+''+CR+'
 '+(+J)+''+¤ Tasks[J]+' 

';¤ }¤ PAGE[1]:=$S+'Zusammenfassung 
Auf '+COMPS+¤ ' Rechnern wurden '+HMACS+' Makros insgesamt '+Calls('J')+¤ '-mal aufgerufen. Davon wurden '+J+' Makros nie aufgerufen.
'+¤ '
'+(NL>9?OtherPages(I)+'
':'')+''+CR+¤ '';¤ for (J:=(I-1)*PageItems+1;(J<=I*PageItems)&&(J<=L);++J) {¤ PAGE[1]:=$PAGE[1]+'';¤ }¤ PAGE[1]:=PAGE[1]+''+CR;¤ repeat (R,NL) {¤ M[]:=statistics((MacCols?1:14),NL[R],LACC);¤ if MacCols DelCats(M,LACC);¤ PAGE[R+1]:='';¤ for (J:=(I-1)*PageItems+1;(J<=I*PageItems)&&(J<=M);++J) {¤ A:=+(M[J]);¤ S:='';¤ }¤ PAGE[R+1]:=PAGE[R+1]+''+CR;¤ }¤ PAGE.add('
'+(MacCols?'Rechner/Makro':'Makro/Rechner')+¤ '
Häufigkeit
Letzter Zugriff
 '+L[J]+¤ ' 
'+(+L[J])+' 
'+FormatDate(LA[J])+¤ ' 
'+NL[R]+' '+¤ (+NL[R])+'
'+FormatDate(NA[R])+'
'+A+' 
'+¤ FormatDate(LACC[J])+' 

');¤ PAGE.add($OtherPages(I));¤ PAGE.add(EndPage);¤ save(PAGE,$PageDir+FileTag+Pad(I)+'.html');¤ PAGE.clear;¤ }¤run($PageDir+FileTag+Pad(1)+'.html');¤* C27=9805,Statistik berechnenStatistik berechnen H27=0,0 P27= M28=33224,@007500* C28=49,Zusatzmakros H28=0,0 P28= M29=648,$functions\[+c]¤¤// -------------------------------------------------------¤// Definieren Sie hier Ihre Standard-Funktionen¤// -------------------------------------------------------¤¤¤// waitwindow(T)¤// ---------------¤// Funktion, die darauf wartet, dass sich ein Fenster¤// mit einem bestimmten Titel öffnet. T ist der Titel¤// oder ein Teil davon. Beispielaufruf:¤// waitwindow("*- Mozilla Firefox$");¤¤global function waitwindow(T) {¤ repeat 20 {¤ R:=handle(T);¤ if R>1 return R;¤ wait(100);¤ }¤ return 0;¤ }¤¤¤// findfunction(F)¤// ---------------¤// Stellt fest, ob es die eingebaute Funktion mit dem ¤// Namen F gibt und liefert dann einen Wert ungleich 0.¤¤global function findfunction(F) {¤ return index(list(replace(FUNCTIONNAMES,' ',chr(13))),F);¤ }¤¤¤// fixpath(DIR)¤// ------------¤// Hängt bei Bedarf einen Backslash an eine Pfadangabe.¤¤global function fixpath(DIR) {¤ L::=length(DIR);¤ if (L && DIR[L]<>'\') DIR:=DIR+'\';¤ return DIR;¤ }¤¤¤// dirwalk(MASK,DIRS)¤// ------------------¤// Liefert alle Dateien, die auf die Maske MASK passen, ¤// in einer Liste. Wenn DIRS ungleich 0 ist, werden ¤// Unterverzeichnisse einbezogen.¤¤global function dirwalk(MASK,DIRS) {¤ local R[];¤ if (filename(MASK)="") MASK:=filepath(MASK)+"*";¤ L[]::=filelist(MASK);¤ repeat (I,L) {¤ if (L[I]) {¤ if DIRS R.add(L[I]);¤ append(R,dirwalk(L[I]+"\"+filename(MASK)));¤ }¤ else R.add(L[I]);¤ }¤ return R;¤ }¤¤¤// findforward(F,S,P)¤// ------------------¤// Sucht ab Position P nach dem String F im String S¤// und liefert die gefundene Position oder 0.¤¤global function findforward(F,S,P) {¤ RESULT::=0;¤ L::=length(F);¤ ST::=length(S)-P+1-L+1;¤ for (I::=0;I<=ST;++I) {¤ if (substr(S,P+I,L)=$F) {¤ RESULT:=P+I;¤ break;¤ }¤ }¤ return RESULT;¤ }¤¤¤// Einige Konstanten für postmessage().¤¤global ¤ WM_NULL:=0x0000¤ WM_MOVE:=0x0003¤ WM_SIZE:=0x0005¤ WM_ACTIVATE:=0x0006¤ WM_SETFOCUS:=0x0007¤ WM_KILLFOCUS:=0x0008¤ WM_ENABLE:=0x000A¤ WM_SETREDRAW:=0x000B¤ WM_SETTEXT:=0x000C¤ WM_GETTEXT:=0x000D¤ WM_GETTEXTLENGTH:=0x000E¤ WM_PAINT:=0x000F¤ WM_CLOSE:=0x0010¤ WM_QUERYENDSESSION:=0x0011¤ WM_QUIT:=0x0012¤ WM_QUERYOPEN:=0x0013¤ WM_ERASEBKGND:=0x0014¤ WM_ENDSESSION:=0x0016¤ WM_SHOWWINDOW:=0x0018¤ WM_CTLCOLOR:=0x0019¤ WM_HELP:=0x0053¤¤ WM_CONTEXTMENU:=0x007B¤¤ WM_COMMAND:=0x0111¤ WM_SYSCOMMAND:=0x0112¤ WM_TIMER:=0x0113¤ WM_HSCROLL:=0x0114¤ WM_VSCROLL:=0x0115¤¤ WM_CUT:=0x0300¤ WM_COPY:=0x0301¤ WM_PASTE:=0x0302¤ WM_CLEAR:=0x0303¤ WM_UNDO:=0x0304¤ WM_HOTKEY:=0x0312¤¤ WM_PENWINFIRST:=0x0380¤ WM_PENWINLAST:=0x038F¤¤ WM_COALESCE_FIRST:=0x0390¤ WM_COALESCE_LAST:=0x039F¤¤ SW_HIDE:=0¤ SW_SHOWNORMAL:=1¤ SW_NORMAL:=1¤ SW_SHOWMINIMIZED:=2¤ SW_SHOWMAXIMIZED:=3¤ SW_MAXIMIZE:=3¤ SW_SHOWNOACTIVATE:=4¤ SW_SHOW:=5¤ SW_MINIMIZE:=6¤ SW_SHOWMINNOACTIVE:=7¤ SW_SHOWNA:=8¤ SW_RESTORE:=9¤ SW_SHOWDEFAULT:=10¤ SW_MAX:=10¤¤ SC_SIZE:=61440¤ SC_MOVE:=61456¤ SC_MINIMIZE:=61472¤ SC_MAXIMIZE:=61488¤ SC_NEXTWINDOW:=61504¤ SC_PREVWINDOW:=61520¤ SC_CLOSE:=61536¤ SC_VSCROLL:=61552¤ SC_HSCROLL:=61568¤ SC_MOUSEMENU:=61584¤ SC_KEYMENU:=61696¤ SC_ARRANGE:=61712¤ SC_RESTORE:=61728¤ SC_TASKLIST:=61744¤ SC_SCREENSAVE:=61760¤ SC_HOTKEY:=61776¤ SC_DEFAULT:=61792¤ SC_MONITORPOWER:=61808¤ SC_CONTEXTHELP:=61824¤ SC_SEPARATOR:=61455;¤¤¤// hide(T)¤// -------¤// Sendet den Befehl "Schließen" an das Systemmenü¤// des Fensters mit dem Handle T.¤¤global function hide(T) {¤ postmessage(T,WM_SYSCOMMAND,SC_CLOSE,0);¤ }¤¤* C29=129,Beim Start zu ladende Funktionen H29=0,0 P29= M30=712,$showmacros\[-o+c]¤// Textbaustein-Ausgabe-Makro. Kategorien ab V. 3.5.8 werden¤// berücksichtigt. In der Lite-Version erscheinen nur die¤// Makrotexte der ersten 15 Makros (Systemmakros zählen nicht).¤// ------------------------------------------------------------¤¤if (VERSION<3050800) {¤ message("Dieses Makro erfordert mindestens Version 3.5.8.0");¤ exit;¤ }¤¤CRLF::=chr(13)+chr(10);¤¤function quotehtml(S) {¤ S:=replace(S,"&","&");¤ S:=replace(S,"<","<");¤ S:=replace(S,">",">");¤ S:=replace(S,"#","#");¤ S:=replace(S,"$","$");¤ S:=replace(S,"@","@");¤ S:=replace(S,"\","\");¤ S:=replace(S,"{","{");¤ S:=replace(S,"}","}");¤ return S;¤ }¤¤function indent(S) {¤ loop {¤ P:=pos(CRLF+" ",S);¤ if (!P) break;¤ J:=P+2;¤ loop {¤ S:=delete(S,J,1);¤ S:=insert(S," ",J);¤ inc(J,6);¤ if !(S[J]=" ") break;¤ }¤ }¤ return S;¤ }¤¤function rgb(S) {¤ return substr(S,5,2)+substr(S,3,2)+substr(S,1,2);¤ }¤¤function formatcategory(N) {¤ S:=''+¤ macrotitle(N)+'';¤ return S;¤ }¤¤function pagepath(CAT) {¤ return getenv("TEMP")+"\Category"+fill(CAT,3,'0')+".html";¤ }¤¤function mainpagelink(T) {¤ return ""+T+"";¤ }¤¤function pageheader(TITLE) {¤ T:="ShortCut-Makros | "+date();¤ RESULT[1]::=""+T+"";¤ RESULT.add('');¤ RESULT.add("

"+TITLE+"

");¤ return string(RESULT);¤ }¤¤function writemacropage(FIRST,LAST,CAT) {¤ ML[]:=macrolist();¤ RESULT[1]::=pageheader("Verfügbare ShortCut-Texte und -Makros | "+¤ date()+"");¤ RESULT.add("

"+formatcategory(FIRST-1)+"

");¤ RESULT.add("");¤ RESULT.add("");¤ LIGHT:=0;¤ repeat (I,ML) {¤ if I>LAST break;¤ if I>=FIRST {¤ if LIGHT COLOR:=" bgcolor='#F6F6FF'";¤ else COLOR:=" bgcolor='#EFEFFF'";¤ RESULT.add("");¤ LIGHT:=!LIGHT;¤ }¤ }¤ RESULT.add("
KürzelErsatztext
");¤ RESULT.add(""+$ML[I]+"");¤ RESULT.add("");¤ S:=macrocomment(I);¤ if (S='') S:=replace(macro(I),chr(164),CRLF);¤ S:=quotehtml($S);¤ if trim(S)="" S:=" ";¤ S:=replace(indent(S),CRLF,"
"+CRLF)¤ RESULT.add(S);¤ RESULT.add("
");¤ RESULT.add("

"+mainpagelink("Zur Hauptseite")+"

");¤ save(RESULT,pagepath(CAT));¤ }¤¤¤ML[]:=macrolist();¤RESULT[1]::=pageheader("Verfügbare ShortCut-Texte und -Makros | "+¤ date()+"");¤CAT:=0; COUNT:=0;¤repeat (I,ML) {¤ if (macroflags(I)&16) {¤ FIRST:=I+1; LAST:=ML;¤ for (J:=FIRST;J<=ML+1;++J) {¤ if ((J>ML) || (macroflags(J)&16)) {¤ LAST:=J-1;¤ ++CAT;¤ break;¤ }¤ }¤ inc(COUNT,Z:=LAST-FIRST+1);¤ A:=""+formatcategory(FIRST-1)+"";¤ A:=A+" ("+(Z)+" Makros)
";¤ RESULT.add(A);¤ writemacropage(FIRST,LAST,CAT);¤ }¤ }¤RESULT.add("

"+COUNT+" Makros in "+CAT+" Kategorien

");¤RESULT.add("");¤save(RESULT,P:=getenv("TEMP")+"\Macros.html");¤run(P);¤¤* C30=17029,Textbausteine im Browser ausgebenTextbausteine im Browser ausgeben H30=0,0 P30= M31=776,$versioninfo\[-o+c]¤¤// Dieses Makro zeigt in einer Textbox die Versionsinformationen¤// aller im Netz von diesem Computer aus sichtbaren ShortCut-¤// Instanzen.¤// Erst, wenn über den Zeitraum WAITINGTIME keine Versionsinfos¤// von den anderen Rechnern mehr eintreffen, kehrt die Funktion¤// versioninfo() zurück.¤// -------------------------------------------------------------¤¤WAITINGTIME:=2000; // ms¤¤// Die Versionsinformationen werden in der Liste VINFO[] ¤// gespeichert.¤¤VINFO[]:=versioninfo(computerlist,WAITINGTIME);¤if !VINFO {¤ message("Keine Daten verfügbar. Besteht keine Netzwerkverbindung?");¤ return;¤ }¤VERSIONS[]:=();¤NAMES[]:=();¤¤// Diese Funktion berechnet aus einer Versionszeichenkette¤// den entsprechenden Ganzzahlwert, damit die Liste VERSIONS¤// numerisch sortiert werden kann.¤// Beispiel: Aus 3.5.7.15 wird 3050715¤¤function numericversion(VSTR) {¤ RESULT::=0;¤ P::=0;¤ repeat (3) {¤ P:=pos(".",VSTR);¤ RESULT:=RESULT*100+int(substr(VSTR,1,P-1));¤ VSTR:=substr(VSTR,P+1,255);¤ }¤ return RESULT*100+int(VSTR);¤ }¤¤// Hier werden aus den ermittelten Versionsinformationen die¤// Versionsmummern und Computernamen extrahiert. Den Nummern ¤// werden die Namen der Computer zugeordnet, deren ShortCut die¤// jeweilige Versionsnummer hat. Dadurch kann man genau sehen,¤// auf welchem Stand welche Computer sind.¤¤repeat (I,VINFO) {¤ S:=VINFO[I];¤ if pos("Name:",S)=1 {¤ S:=trim(substr(S,6,255));¤ P:=pos(" ",S);¤ NAME:=substr(S,1,P-1);¤ P:=pos("Version",S);¤ if P<>0 {¤ VERSION:="";¤ S:=trim(substr(S,P+8,255));¤ for (J:=1; J<=length(S); ++J) {¤ if pos(S[J],"0123456789.")<>0 VERSION:=VERSION+S[J];¤ else break;¤ }¤ if VERSION<>"" {¤ P:=index(VERSIONS,VERSION);¤ if P<>0 {¤ S:=NAMES[P]+" "+NAME;¤ #S:=NAMES[P]+1;¤ NAMES[P]:=S;¤ }¤ else {¤ #VERSION:=numericversion(trim(VERSION));¤ VERSIONS[VERSIONS+1]:=VERSION;¤ #NAME:=1;¤ NAMES[VERSIONS]:=NAME;¤ }¤ }¤ }¤ }¤ }¤¤repeat (I,VERSIONS) {¤ S:=fill(VERSIONS[I],-10);¤ S:=S+fill(" ("+(+NAMES[I])+")",6);¤ S:=S+" "+NAMES[I];¤ #S:=VERSIONS[I];¤ VERSIONS[I]:=S;¤ }¤¤sort(VERSIONS,2);¤¤// Nun die Ergebnisse anzeigen, zuerst die Liste¤// der Versionen und der Computernamen dazu, dann die ¤// kompletten Versionsinformationen.¤¤textbox(VERSIONS);¤textbox(VINFO);¤¤exit;¤* C31=15481,Versionsinformationen anzeigenVersionsinformationen anzeigen H31=0,0 P31=