====================================== Programm MiniOle - Version 1.1.3 Freeware von Heiko Rost (heiko.rost@gmx.de) ====================================== 1. Beschreibung: ================ Das Programm stellt einige zusätzliche Funktionen für den Windows Scripting Host zur Verfügung. Es wurde zur besseren Scriptsteuerung für Hamster Classic (https://hamster-classic.de/) per VB geschrieben, kann aber natürlich auch in jedem anderen Script genutzt werden. Wichtig ab Version 1.1.3: Bei meinem aktuellen Internetprovider ist die Nutzung des DFü-Netzwerkes nicht möglich. Deshalb kann ich im Falle von Problemen mit den zugehörigen Funktionen (Abschnitt 4.3) keine Fehlersuche und Korrektur mehr vornehmen. 2. Systemvoraussetzungen: ========================= Ein 32/64-bit-Windows mit dem Windows Scripting Host. 3. Installation: ================ Das Programm muß in einen Ordner auf der Festplatte kopiert und einmal gestartet werden. Es erscheint als Symbol im Systray und muß dort anschließed durch einem Klick mit der rechten Maustaste und "Ende" geschlossen werden. Innerhalb eines Scriptes erfolgen Start und Ende automatisch. Unter mit Windows 7/64 (und möglicherweise auch anderen Versionen) kann es Probleme geben, wenn der komplette Pfadname an irgendeiner Stelle Leerzeichen enthält. 4. Nutzung in eigenen Scripten: =============================== Die Syntaxbeispiele basieren auf VB, bei anderen Sprachen müssen sie entsprechend angepaßt werden. Als Objektnamen werden MiniOle und Hamster verwendet, diese müssen mit Wscript.CreatObject erzeugt worden sein. Das Programm startet automatisch, sobald im Script das entsprechende Objekt erstellt wird. Set MiniOle = Wscript.CreateObject("ScriptFunctions.App") 4.1. Informationen über MiniOle ------------------------------- 4.1.1. ShowInfo --------------- Es wird eine Infobox über das Programm angezeigt. Syntax: ShowInfo 4.1.2. MinioleVersion --------------------- Die Versionsnummer von MiniOle wird ermittelt. Syntax: = MinioleVersion Es wird immer ein String mit sechs Zeichen übergeben, zum Beispiel 010100 bei Version 1.1.0. 4.1.3. MinioleIniName --------------------- Der komplette Name der von MiniOle benutzten Ini-Datei wird ermittelt- Syntax: = Miniole.MinioleIniName 4.2. Fensterfunktionen ---------------------- 4.2.1. WindowExists ------------------- Diese Funktion ermittelt, ob ein Fenster mit dem angegeben Namen existiert. Syntax: = WindowExists() Es muß nicht der komplette angegeben werden, die Suche nach "Editor" ergibt beispielsweise wahr, wenn ein Fenster mit dem Namen "Editor - test1.txt" existiert If MiniOle.WindowExists("Hamster") Then Wscript.Echo "Der Hamster ist zur Zeit aktiv" Else Wscript.Echo "Der Hamster schläft gerade" End If 4.2.2. CloseWindow ------------------ Es wird ein Fenster mit dem angegebenen Namen gesucht und versucht zu schließen. Syntax: closeWindow() Der Aufruf entspricht weitestgehend dem "normalen" Beenden des Programmes, eine evtl. Meldung wie "Dokument vor dem Beenden speichern?" wird wie sonst auch angezeigt. Existieren mehrere Fenster mit dem Namen wird das erste gefundene geschlossen. MiniOle.CloseWindow("Editor") 4.2.3. WndGetList ----------------- Es wird eine Liste aller Fenster zurückgegeben, die mit dem angegebenen Suchmuster übereinstimmen. Bei keinem entsprechendem Fenster gibt die Funktion eine leere Zeichenkette zurück. Syntax: = WndGetList(, ) Es werden die Titel aller geöffneten Fenster mit (regulärer Perl-Ausdruck) verglichen und alle übereinstimmenden zurückgegeben. Die einzelnen Namen sind durch abgegrenzt. Diese Funktion kann, im Gegensatz zu WindowExists, auch Fenster finden, bei denen der Anfang des Namens nicht bekannt ist. Mit wscript.echo miniole.WndGetList(" - netscape$",chr(13)+chr(10)) werden die Titel aller Fenster angezeigt, die mit " - netscape" enden. 4.2.4. WndClose --------------- Es werden (wahlweise alle) Fenster geschlossen, deren Titel mit dem Suchmuster übereinstimmen und die Liste aller betroffenen Fenster zurückgegeben. Syntax: = WndClose(,,) Für und gilt das unter WndGetList geschriebene. Wenn True ist, werden alle gefundenen Fenster geschlossen. Der Aufruf von wscript.echo miniole.WndClose("microsoft internet explorer$",chr(13)+chr(10),true) schließt den IE und zeigt an, um welche Fenster der Desktop erleichtert wurde. Diese Funktion ist mit Vorsicht zu gebrauchen, im Zweifelsfall sollte vorher mit WndGetList geprüft werden, was alles mit übereinstimmt. 4.3. DFÜ-Netzwerk ----------------- 4.3.1. GetRasConnection ----------------------- Es wird der Name der aktuellen DFÜ-Netzwerkverbindung ermittelt. Ist keine aktiv, gibt die Funktion eine leere Zeichenkette zurück. Syntax: = GetRasConnection Mit folgendem Beispiel kann abhängig von der Verbindung der SMTP-Server für die ausgehenden eMails gewählt werden: Select Case MiniOle.GetRasConnection Case "Provider1" Hamster.ControlRunSendMail smtp.provider1, "", "" Case "Provider2" Hamster.ControlRunSendMail smtp.provider2, "", "" Case Else Wscript.Echo "Keine Mailauslieferung möglich" End Select 4.3.2. RasClose --------------- Es wird eine evtl. bestehende DFÜ-Verbindung getrennt. Syntax: = RasClose 4.3.3. LCR-Funktionen --------------------- Mit den folgenden Funktionen können selbstdefinierte Tarifdaten ausgewertet werden, um die zum aktuellen Zeitpunkt günstigste DFÜ- Verbindung zu ermittlen. Haben mehrere den gleichen Preis, wird die mit der kleinsten Nummer unter [LCR] in miniole.ini bzw. unter [Connections] in tk32.ini als günstigste angesehen. Ab Version 1.1.1 kann jeder Nutzer von Juergen Haibles Programm Telekost 32 (TK32) die dort benutzten Tarifinformationen nutzen. Dabei ist folgendes zu beachten: In MiniOle wird normalerweise mit Pfennigen gerechnet, TK32 benutzt als Eingheit DM. Auswirkungen kann das haben, wenn mit den von GetRasLCRInfo zurückgegebenen Beträgen weitergerechnet wird. TK32 rechnet bei den Kosten je Einheit mit maximal vier Stellen hinter dem Komma, deshalb sind in den Tarifdateien manche sekundengenau abrechnenden Provider mit leicht gerundeten Werten eingetragen. Dadurch kann der errechnete Preis etwas vom angegebenen Minutenpreis abweichen. 4.3.3.1. GetRasLCRName ---------------------- Die Funktion ermittelt den Namen der DFÜ-Verbindung, die zum aktuellen Zeitpunkt für die angegebene Verbindungsdauer in Sekunden am preiswertesten ist. Als maximale Verbindungsdauer können 86400 Sekunden (1 Tag) angegeben werden, bei der Angabe von längeren Zeiten wird nur mit diesem Höchstwert gerechnet. Kann der Name nicht ermittelt werden, wird eine leere Zeichenkette zurückgegeben. Die Verbindungstarife müssen in die Datei miniole.ini (s. u.) oder bei TK32 eingetragen sein. Syntax: = GetRasLCRName() Mit den folgenden Befehlen wird getestet, ob eine Online-Verbindung besteht. Bei Bedarf wird die günstigste aufgebaut und am Ende wieder getrennt. Verbindung="" if MiniOle.GetRasConnection="" then Verbindung=MiniOle.GetRasLCRName(60) 'geschätzte Dauer: 60 Sekunden if Verbindung="" then Wscript.echo "Günstigste DFÜ-Verbindung kann nicht ermittwelt werden" Wscript.Quit end if if not Hamster.rasdial(Verbindung,"","") then Wscript.Echo "Fehler beim Verbindungsaufbau" Wscript.Quit end if end if 'hier alle Befehle zum Senden und Empfangen einfügen, dabei evtl. abhängig 'von der aktuellen Verbindung nur die verfügbaren Server verarbeiten '(siehe Beispiel für GetRasConnection) Hamster.ControlWaitIdle 0 if Verbindung<>"" then 'nur trennen, wenn Verbindung über dieses Script aufgebaut Hamster.RasHangup end if 4.3.3.2. GetRasLCRInfo ---------------------- Die Funktion erstellt eine Liste mit den Preisen aller für die LCR-Berechnung benutzten Verbindungen. Es wird die angegebene ausgewertet, die einzelnen Einträge durch voneinander getrennt. Syntax: = GetRasLCRInfo(,) Folgendes Beispiel zeigt die günstigste Verbindung für 60 Sekunden sowie alle Preise: CrLf = chr(13)+chr(10) Wscript.echo "am günstigsten: "+miniole.GetRasLcrName(60)+CrLf+CrLf+_ "Gesamtliste: "+miniole.GetRaslcrInfo(60,"; ") Mit dem ini-Eintrag SortiereListe kann festgelegt werden, ob die Liste nach Preis sortiert wird. 4.4. Ini-Dateien und Registry ----------------------------- 4.4.1. IniRead -------------- Die Funktion liest Werte aus einer Ini-Datei. Syntax: = IniRead(,,,) Das folgende Beispiel liest die hamster.ini und ermittelt den Preferred Postserver sowie die Port-Nummer des lokalen NNTP-Servers: const inidatei="d:\download\hamster\hamster.ini" 'anpassen Wscript.echo "Post-Server: " & MiniOle.IniRead(inidatei,"setup","preferred.postserver","") Wscript.echo "NNTP-Port: " & MiniOle.IniRead(inidatei,"setup","local.port.nntp",0) 4.4.2. IniWrite --------------- Die Prozedur schreibt Werte in eine Ini-Datei. Syntax: IniWrite ,,, Bei fehlerhaften Werten in einer ini-Datei kann sich das Verhalten des entsprechenden Programmes unvorhersehbar ändern. Diese Prozedur also wirklich nur einsetzen wenn man die Folgen kennt. Mit dem folgenden Beispiel wird der Hamster so eingestellt, daß er beim nächsten Start den lokalen News-Server auf den Port 1190 legt. const inidatei="d:\download\hamster\hamster.ini" 'anpassen MiniOle.IniWrite inidatei,"setup","local.port.nntp",1190 4.4.3. IniDeleteKey ------------------- Es wird der angegebene Schlüssel aus der Ini-Datei gelöscht. Syntax: IniDeleteKey ,, Das folgende Beispiel löscht die Einträge für die preferred-Server: const inidatei="d:\download\hamster\hamster.ini" 'anpassen MiniOle.IniDeleteKey inidatei,"setup","preferred.postserver" MiniOle.IniDeleteKey inidatei,"setup","preferred.smtpserver" 4.4.4. IniReadSections ---------------------- Die Funktion erstellt eine Liste aller Sektionen der angegebenen Ini-Datei. Syntax: = IniReadSections(,) 4.4.5. IniReadSection --------------------- Die Funktion erstellt eine Liste aller Schlüssel in der angegebenen Sektion der Ini-Datei Syntax: = IniReadSection(,,) 4.4.6. IniReadSectionValues --------------------------- Die Funktion erstellt eine Liste aller Schlüssel mit ihren Werten in der angegebenen Sektion der Ini-Datei. Syntax: = IniReadSektionValues(,,) 4.4.7. GetPerfStats ------------------- Es werden Daten aus HKEY_DYN_DATA/PerfStats/StatData ausgelesen. Damit ist es möglich, verschiedene Angaben über den Systemstatus zu erhalten wie sie zum Beispiel mit dem Systemmonitor angezeigt werden. Syntax: = GetPerfStats() Die Beschreibung der einzelnen Schlüssel sind in der Registry unter HLM\System\CurrentControlSet\control\PerfStats\Enum zu finden. 5. miniole.ini ============== Beim ersten Programmstart wird diese Datei mit einigen Vorgabewerten erstellt. [Fenster] ;3 Zeilen mit Fensterposition und -stil für den Testmodus Links=0 Oben=0 Vordergrund=1 ;wenn =1, startet das Programm mit einem bedienbaren Hauptfenster. In ;den Eingabefeldern können Parameter eingegeben und einige Funktionen per ;Hand über das Test-Menü aufgerufen werden. Gleichzeitig wir eine ;Log-Datei erstellt und die zuletzt aufgerufene Funktion angezeigt. Testmodus=0 ;wenn =1 wird das Programm (außer im Testmodus) vollständig unsichtbar ;gestartet. Im Taskmanager ist es noch zu finden und kann dort notfalls ;beendet werden. Unsichtbar=0 ;wenn =1 wird ein Log aller Aktionen erstellt. Ein bereits existierendes ;Log wird beim Programmstart überschrieben. Der Eintrag wird ignoriert ;wenn Testmodus=1 SchreibeLog=0 .............. Die nächsten Einträge sind für die GetRasLCR-Funktionen notwendig und müssen per Hand vorgenommen werden. Als Beispiele sind die von mir genutzten Provider knUUt 1.0 über MCI WorldCom und NGI by Call mit den Preisen vom 1.6.2000 aufgeführt. [LCR] ;Es folgen die Namen der auszuwertenden Verbindungen des DFÜ-Netzwerkes. ;Maximal sind 100 (von 0= bis 99=) möglich. Haben mehrere bei der ;Auswertung den selben Preis, wird die mit der kleinsten Nummer als ;günstigste zurückgeliefert. 10=NGI by Call 20=knUUt ;an den folgenden Tagen gelten die Feiertagstarife. Dieser Eintrag wird ;nur verarbeitet, wenn TK32Mode=0 FtListe=1.6.2000 11.6.2000 12.6.2000 3.10.2000 25.12.2000 26.12.2000 31.12.2000 ;Folgender Eintrag legt fest, ob und wie TK32 genutzt wird ;0 - TK32 wird nicht genutzt ;1 - die Namen der Verbindungen werden aus miniole.ini gelesen, ; Feiertage und Tarife aus tk32.ini und den zugehörigen Tarifdateien ; (auf genaue Übereinstimmung der Verbindungsnamen achten) ;2 - Verbindungen, Feiertage und Tarife werden aus tk32.ini bzw. den ; zugehörigen Tarifdateien gelesen TK32Mode=0 ;Im folgenden Eintrag wird der Installationspfad von TK32 eingetragen. ;MiniOle prüft, ob die Datei tk32.ini im angegebenen Pfad vorhanden ist. ;Wenn nicht, wird die gesamte Festplatte durchsucht und der gefundene ;Pfad gespeichert. TK32Pfad=C:\Programme\Online\TelKost\ ;Hier wird festgelegt, ob die Liste von GetRasLCRInfo sortiert wird ;-1: teuerste Verbindung zuerst ; 0: keine Sortierung ; 1: preiswerteste Verbindung zuerst SortiereListe=0 ;Für jeden Provider ist (wenn TK32Mode=0) eine eigene ini-Sektion nötig. ;Der Name wir aus der Zeichenkette LCR, einem Leerzeichen und dem Namen ;der DFÜ-Verbindung gebildet. ; ;Obwohl knUUt und NGI im Sekundentakt abrechnen, sind jeweils ;Minutenpreise in Pfennig angegeben. Dadurch werden zum einen ;Rundungsfehler vermieden und zum anderen die Einträge übersichtlicher. ;Wer Wert auf korrekte Auswertung für kurze Verbindungen legt, sollte ;Taktzeiten von 1 s wählen und entsprechende krumme Pfennigbeträge ;einsetzen (die Taktzeiten müssen ganze Zahlen sein). ; ;Die Kostenprofile werden in der Form ;Name= ... ;angegeben. Der erste Zeitpunkt muß 00:00 sein, alle weiteren sind ;aufsteigend einzutragen. [LCR NGI by Call] ;keine Einwahlgebühr, die Zeile ist in diesem Beispiel aufgeführt ;und muß nur vorhanden sein, wenn eine Einwahlgebühr anfällt Ew=0 ;es folgt der frei wählbare Name des Kostenprofiles für alle Tage der ;Woche und die Feiertage Mo=Alle Di=Alle Mi=Alle Do=Alle Fr=Alle Sa=Alle So=Alle Ft=Alle ;einfaches Profil, es kostet ab 00:00 Uhr den ganzen Tag 2,49 Pfennig für ;60 Sekunden Alle=00:00 2,49 60 [LCR knUUt] ;in der Woche gilt das Profil Woche Mo=Woche Di=Woche Mi=Woche Do=Woche Fr=Woche ;an Wochenenden und Feiertagen das Profil WEnde Sa=WEnde So=WEnde Ft=WEnde ;Kosten sind 2 bzw. 0 Pf. für knUUt sowie Telefon von MCI Woche=00:00 2,3 60 08:00 4,3 60 09:00 6,6 60 18:00 5,5 60 20:00 3,5 60 21:00 2,3 60 WEnde=00:00 2,3 60 09:00 4,6 60 18:00 3,5 60 21:00 2,3 60 6. Dank an... ============= ...Luu Tran für seine Delphi-Umsetzung von Philip Hazel's PCRE (Perl Compatible Regular Expression). ...Angus Robertson (Magenta Systems Ltd., delphi@magsys.co.uk, http://www.magsys.co.uk/delphi/) und Daniel Polistchuck für ihre RAS-Komponente. ...Juergen Haible für sein TeleKost32 und die damit verbundenen Tarifdateien. 7. Versionsübersicht: ===================== 1.0 - 23.10.1999 erste Programmveröffentlichung 1.01 - 27.11.1999 neu: IniRead-/IniWrite-/IniDeleteKey-Methoden 1.02 - 27.12.1999 neu: GetRasLCRName/GetRasLCRInfo-Methoden neu: Testmodus zur Protokollierung und Fehlersuche neu: Programm kann komplett unsichtbar gestartet werden fix: Mehrfachstart wird unterbunden beta 1.1.0 - 7.1.2000 änd: neue COM-Schnittstelle für Nutzung unter Perl von ActivState 1.1.0 - 9.2.2000 änd: Log auch ohne Testmodus möglich neu: IniReadSektions/IniReadSection/IniReadSectionValues/GetPerfStats neu: WndGetList/WndClose neu: RasClose 1.1.1 - 31.5.2000 neu: TK32-Tarife können für die LCR-Funktionen genutzt werden neu: GetRasLCRInfo liefert wahlweise eine sortierte Liste 1.1.2 - 2.6.2000 fix: TK32-Verbindungen ohne Telefon- bzw. Internettarif erzeugen eine Fehlermeldung 1.1.3 - 03.2017 fix: Das Symbol im Systray wurde manchmal nicht angezeigt änd: Fehlerbehandlung durch MadExceot änd: Alle Funktionen zum DFÜ-Netzwerk (Punkt 4.3.) sind noch enthalten, werden aber als obsolet angesehen und im Problemfall nicht mehr korrigiert