Eigenschaft |
Beschreibung der im Head stehenden HTA-Vefehle |
Code zum
Kopieren/ Beispiel |
ApplicationName (Name der Applikation) |
Name der HTA. In der Reiterkarte Anwendungen im Taskmanager wird dieser so angezeigt. Unter Prozesse werden Sie dann auch die mshta.exe finden..., Wichtig auch für die Instanz SingleInstance |
Wichtig APPLICATIONNAME="beliebiger Name" |
Border (Rahmentyp) |
thick: für ein Fenster mit
änderbarer Größe |
Optional Border="none" Border="dialog" Border="thin" Border="thick" |
Caption (Titelleiste) |
Anzeige der Titelleiste: Standardwert: Yes |
Optional caption:"yes" caption:"No" |
MaximizeButton Minimize Button |
Anzeigen der Schaltflächen Minimieren bzw. Maximieren in der Titelleiste der HTA. Standardwert: Yes. |
Optional MaximizeButton="Yes" MaximizeButton="No" Minimize Button="Yes" Minimize Button="No" |
Scroll |
Anzeige der Bildlaufleiste bei
Überschreitung con Text der Fenstergröße |
Optional Scroll="Yes" Scroll="No" |
ShowInTaskbar (Anzeigen in Taskbar) |
Anzeige der HTA in Taskleiste.Standardwert: Yes. |
Optional ShowInTaskbar="Yes" ShowInTaskbar="No" |
SingleInstance (Einzelinstanz) |
Standardwert: yes, verhindert die Öffnung weierer Instanzen |
Optional SingleInstance="Yes" SingleInstance="No" |
SysMenu |
Anzeige des Systemmenü-Icon in der Titelleiste der HTA, Standardwert: Yes. |
Optional SysMenu="Yes" SysMenu="No" |
WindowState |
Größe des HTA-Fensters fest beim Start. Mögliche Werte sind Normal, Minimize und Maximize. Der Standardwert: Normal. |
Optional WindowState="Minimize" WindowState="Normal" WindowState="Maximize" |
Formularfeld/Funktion | Code
body <body>....</body> |
Code VBS <SCRIPT Language="VBScript">....</SCRIPT> |
Erklärung |
Textarea | <div>
Erzeugt ein Eingabefeld für einen Text</div><div><textarea
name="BasicTextArea" rows="5"
cols="75"></textarea>
</div> <br> <div>Jetzt noch ein Run-Button</div> |
Sub
RunScript Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("test.txt") Set objFile = objFSO.OpenTextFile("test.txt", 2) objFile.WriteLine BasicTextArea.Value objFile.Close End Sub |
Haben
wir eben bereits erörtert. Das wird jetzt immer ein wenig kürzer. Im
Textdokument zum Download dazu den Quellcode für eine Demo-Anwendung in
HTA : Aerea.txt. Im Body die Anweisung: <input id=runbutton class="button" type="button" value="Run Button" name="run_button" onClick="RunScript"> ----- Der Start für eine Batch muss wie folgend beschrieben vor dem End Sub eingefügt werden: dim shell set shell = createobject("wscript.shell") shell.run """C:\ihr Pfad zur Batch\ergebnis.bat""" Dieser Codeschnipsel muss wie gesagt vor dem End Sub eingefügt werden. Vorsicht: 2 steht für destruktives Schreiben (alter Text in Dokument wird gelöscht! ) |
Textbox | <div><input type="text" name="BasicTextBox" size="50"></div> | Sub
RunScript Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("test.txt") Set objFile = objFSO.OpenTextFile("test.txt", 2) objFile.WriteLine BasicTextBox.Value objFile.Close End Sub |
Testbox
ist fast dasselbe wie eine Textärea,
nur in diesem Fall einzeilig mit 50 Zeichen. Der Name des auszudruckenden Textes wurde nun BasicTextBox genannt. Der Name der Textbox(name="BasicTextBox") entspricht also immer dem Namen des druckbaren Bereiches und als nähere Beschreibung (nach dem Punkt) kommt der Value (Wert) , der erst vom User eingegeben wird. HTA: Textbox.txt Vorsicht: 2 steht für destruktives Schreiben (alter Text wird gelöscht! ) |
Listbox | <div><select size="3"
name="DropDown1"
multiple> <option value="1">Option 1</option> <option value="2">Option 2</option> <option value="3">Option 3</option> <option value="4">Option 4</option> </select></div> |
Sub
RunScript For i = 0 to (Dropdown1.Options.Length - 1) If (Dropdown1.Options(i).Selected) Then strComputer = strComputer & Dropdown1.Options(i).Value & vbcrlf End If Next Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("test.log") Set objFile = objFSO.OpenTextFile("test.log", 2) objFile.WriteLine strComputer objFile.Close End Sub |
Das ist
jetzt ein wenig angepasster Code. In einer Listbox stehen also die
Bezeichnungen Option
1, Option
2...Option
4. Die Nummer
hinter Option ist nur zur Orientierung gedacht, kann aber auch
irretieren. Die Zahlen 1-4 in den option value werden an das Textdokument über VBS übergeben - besser gesagt eine Zahl, je nach Auswahl des Users. strComputer ist die Variable für die Ausgabezahl. In der For Schleife steht: Für die Dropdownfelder 1-4 , wenn (if) im Dropdown1 eine unbekannte Option(i) vom User ausgesucht wurde , dann ist der Value (1,2,3 oder 4) der Option auszugeben. Den Code anzupassen ist mittelschwer. Die Zahlen von Option value würde der Sternenhimmelstuermer so lassen. 1-3 (select size) - mehr Optionswerte wären auch kein Problem - Optionswerte sind kein Problem, da die For-Schleife mit einer unbekannten Anzahl i von über 0 bis unbekannte Länge (length-1) arbeitet. Ja, dass ist wieder so ein wenig dämlich: VBS und Javascript fangen an bei 0 zu Zählen. O-3 sind also 4 Auswahlmöglichkeiten - dabei ist die select size 3, also 0,1,2,3 und 4. Da kann der Durchschnittsuser ganz schön ins Schlittern kommen - also bei 5 Namen zum Aussuchen ist select size=" 4". Die For-Schleife arbeitet nur mit DropDown1, dem option value in unbestimmter Anzahl und strComputer ist wieder so eine definierte Variable, die Sie umbenennen können - dann aber an drei Stellen: zwei Mal im Runscript bei der Definition und unten blau markiert bei der Ausgabe. vbcrlf gibt die unterstehemdem Werte aus - sonst würde immer derselbe Wert ausgegeben... Wählt der User Option zwei, so wird die Zahl 2 und nicht der Wert ausgegeben! Das sollten Sie in der Batch berücksichtigen! Ist nicht 100 % richtig erklärt, aber der Rahmen stimmt-:) HTA: Listbox.txt Vorsicht: 2 steht für destruktives Schreiben (alter Text wird gelöscht! ) |
Dropdownmenü | <div><select size="1"
name="DropDown1"
onChange="RunScript"> <option value="1">Option 1</option> <option value="2">Option 2</option> <option value="3">Option 3</option> <option value="4">Option 4</option> </select></div> |
Sub
RunScript Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("test.log") Set objFile = objFSO.OpenTextFile("test.log", 2) objFile.WriteLine DropDown1.Value objFile.Close End Sub |
Hier ist alles wieder einfach. DropDown1 ist
die Oberadresse und Value
wieder der Wert aus dem Dropdownmenü. Wäre es doch immer so
einfach...die Listbox ist im Vergleich dazu eine glatte
Fehlkonstruktion - Das Dropdownmenü im Vergleich ist doch viel
humaner.... Ach ja, Hier wird on change als Auslöser als Auslöser
gewählt, was bedeutet, dass
beim Wechsel automatisch die übergebene Zahl im Textdokument geändert
wird. Können Sie natürlich tauschen...einfach mal bei
Google nachschauen. HTA Dropdownmue.txt Vorsicht: 2 steht für destruktives Schreiben (alter Text wird gelöscht! ) |
Checkbox | <div>
Erzeugt eine checkbox</div><div><input
type="checkbox"name="BasicCheckbox"value="1">
Option 1</div> <br> <div>Jetzt noch ein Run-Button</div> <div><input id=runbutton class="button" type="button" value="Run Button" name="run_button" onClick="RunScript"></div> |
Sub
RunScript If BasicCheckbox.Checked Then Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("test.log") Set objFile = objFSO.OpenTextFile("test.log", 2) objFile.WriteLine BasicCheckbox.value objFile.Close Else Msgbox "Es wurde nichts ausgewählt" End If End Sub |
Ein
Häkchen mit Meldung, wenn nichts ausgewählt wird: Beim Radio Button
wird auf eine Mehrfachauswahl eingegangen - Hier wird nur eine Auswahl
lals BasicCheckbox
deklariert. Als 1 wird
der
Wert (Value)
ausgegeben, Auslöser ist woeder onclick
für
das Runskript. Wenn
(if)
die Basic Checkbox
ausgewählt wurde, dann (then)
wird wieder unser
Textdokument mit dem Value
1
ausgegeben, sonst (else)
wird eine Warnung
im Windowsstil (Fenster) ausgegeben, das nichts ausgewählt wurde -
ziemlich unsinnig für einen Wert. Ansonsten können Sie Else Msgbox "Es wurde nichts ausgewählt" löschen und die Meldung ist Passe... Ging hier nur drum die Msgbox vorzustellen. HTA: Checkbox.txt Vorsicht: 2 steht für destruktives Schreiben (alter Text wird gelöscht! ) |
Radiobutton | <div> <input type="radio"
name="UserOption"
value="1">Option
1<BR> <input type="radio" name="UserOption" value="2">Option 2<BR> <input type="radio" name="UserOption" value="3">Option 3<BR> </div> |
Sub
RunScript If UserOption(0).Checked Then Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("test.log") Set objFile = objFSO.OpenTextFile("test.log", 2) objFile.WriteLine UserOption(0).value objFile.Close End If If UserOption(1).Checked Then Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("test.log") Set objFile = objFSO.OpenTextFile("test.log", 2) objFile.WriteLine UserOption(1).value objFile.Close End If If UserOption(2).Checked Then Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("test.log") Set objFile = objFSO.OpenTextFile("test.log", 2) objFile.WriteLine UserOption(2).value objFile.Close End If End Sub |
Ganz schön viel Holz für die mickrige Ausgabe
einer Zahl in einem Textdokument. Die Optionen 0, 1 und 2 werden
gecheckt (Javascript wird immer bei Null angefangen zu zählen, so dass
bei der Auswertung wieder UserOption(0)
für den Wert (value)
1
genommen wird. Wenn Sie weitere Optionsfelder einfügen - nie
das End If
am Ende vergessen. HTA: Radiobutton.txt Vorsicht: 2 steht für destruktives Schreiben (alter Text wird gelöscht! ) |
Jetzt verlassen Sie den Tabellenbereich und noch ein paar Tipps zum Bearbeiten: Angefangen bei dem Auslesen der Zwischenablage und noch ein paar Tips zu Textdokumenten und der Ausgabe allgemein |
|||
Zwischenablage auslesen (Text) |
<html> <head> <title>TEST</title> <hta:application scroll="no" windowState="normal"> <style type="text/css"> .auto { background: #00BFFF; height: 300px; overflow: auto; width: 400px; border: 1px solid #000; padding: 10px; } </style> </head> <script language="VBScript"> sub Rundoku DataArea.InnerHTML = document.parentwindow.clipboardData.GetData("text") End Sub </script> <body> <div id=DataArea class="auto"><center><input id=runbutton class="button" type="button" value="Ergebnis" name="run_button" onClick="Rundoku"></center></div> </body> </html> |
<script language="VBScript"> sub Rundoku DataArea.InnerHTML = document.parentwindow.clipboardData.GetData("text") End Sub |
Der Text
der Zwischenablage wird im Div-Container mit der ID "dem Namen"
DataArea
ausgegeben. Das Script schreibt den Inhalt in die ID
DataAerea in der HTML-Seite (InnerHTML).
Dort wird im document
- im selben Fenster (parentwindow)
- Der Inhalt der Zwischenablage (clipboardData)
herausgeholt (getData("text")),
der in diesem Fall Text ist bzw. nur für Text gilt.. Zwischenablage.txt Die Ausgabe erfolgt in einem DIV-Container, der nochmal ausführlich bei Ausgabe an HTA erklärt wird. |
Textärea: Text hinzufügen | <div>
Erzeugt ein Eingabefeld für einen Text</div><div><textarea
name="BasicTextArea" rows="5"
cols="75"></textarea>
</div> <br> <div>Jetzt noch ein Run-Button</div> |
Sub
RunScript Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("test.txt") Set objFile = objFSO.OpenTextFile("test.txt", 2) objFile.WriteLine BasicTextArea.Value & " Hier wird ein Text eingefügt" objFile.Close End Sub |
Die
Erklärung haben Sie bereits unter
Textaerea: Hier wird nur ein Text zum
Text des Users hinzugefügt. Hinter objFile.WriteLine kann nach
einem
Leerzeichen beliebiger Text oder Variablen in unbegrenzter Anzahl
stehen. Das gilt selbstverständlich für alle Formularelemente. Das & ist dasselbe wie bei Batches. Das Leerzeichen vor Hier ist wichtig, da sonst der Text des Users ohne Leerzeichen mit dem Text ausgedruckt wird! Variationen: objFile.WriteLine "Name: " & BasicTextArea.Value Vorsicht: 2 steht für destruktives Schreiben (alter Text wird gelöscht! ) |
Textärea: Datenbank
mit zwei Formularfeldern: nicht distruktive Ausgabe mit Prüfung, ob Dokument existiert und Anlegung von neuem Dokument |
<div> Erzeugt eine Datenbank mit Komma, bei der Text im Textdokument hinzugefügt wird </div> <div>Nachname:</div><div><input type="text" name="BasicTextBox" size="50"></div> <br> <div>Vorname:</div><div><input type="text" name="BasicTextBox1" size="50"></div> <br> <div>Jetzt noch ein Run-Button</div> <input id=runbutton class="button" type="button" value="Run Button" name="run_button" onClick="RunScript"> |
Sub
RunScript Dim fso Set fso = CreateObject("Scripting.FileSystemObject") if fso.FileExists("test.csv") then Set objFSO = CreateObject("Scripting.FileSystemObject") set objFile = objFSO.OpenTextFile("test.csv", 8, false) objFile.WriteLine BasicTextBox.Value & "," & BasicTextBox1.Value objFile.Close else Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("test.csv") Set objFile = objFSO.OpenTextFile("test.csv", 2) objFile.WriteLine BasicTextBox.Value & "," & BasicTextBox1.Value objFile.Close end if End Sub |
Wir haben jetzt zweimal eine Textära erstellt,
einmal mit dem Namen BasicTextBox
und dann BasicTextbox1.
RunScript
wird wieder durch den Button ausgeführt. Mit dim fso wird eine Variable definiert. Die ist ein Scripting.FileSystem Object. Wenn (if) relativ im Pfad eine Datei (fso.FileExists) mit Namen Test.csv (*.csv Tabellenformat mit Excel lesbar), dann (then) kreieren wir wieder eine Hülle (create object) mit dem Inhalt der CSV-Datei, die wir öffnen (OpenTextFile) und beschreiben, aber diesmal mit Hinzufügen eines Textes (8). Erinnern Sie sich? 8 steht für Text anfügen in neuer Zeile, 1 für lesen und 2 steht für destruktives Schreiben (alter Text wird gelöscht! ). In das geöffnete Dokument schreiben wir die beiden Eingaben des Users (BasicTextBox.Value & "," & BasicTextBox1.Value) mit einem Komma getrennt, wie in der letzten Zeile beschrieben Wert 1, ein Komma, Wert 2. Was aber, wenn dieses Dokument nicht existiert? Dann erstellen wir es einfach mit (else) mit unserem standard-destruktiven Erstellen und Beschreiben eines neuen Dokumentes. Das end if ist nur das Ende des if... then... else... Abarbeitens und obligatorisch. Bei jeder neuen Eingabe wird also das Dokument von neuem geöffnet und der Text des Users angefügt: Das ist eine perfekte Anwendung zur Erstellung einer Datenbank, andere nehmen dafür Access, dabei gibt es das Umsonst -:) HTA: Datenbank |
Zip | Engisch: Code in Textdatei kopieren und Dateiendung in *.vbs umwandeln | Ja,
mit vbs ist es möglich ohne Zip-Programm Dateien aus einem ZIP-Archiv
zu extrahieren oder umgekehrt zu verpacken - manch ein Batchschreiber
wird hier vor Neid platzen. Sie müssen nur noch den Pfad anpassen
- beim Entpacken Unzip ZipFile=
ihren Pfad und bei ExtractTo=
den Pfad zum Zielverzeichnis mit
/ am Ende, beim Zippen ist src die Quelle (der Ordner der komptrmiert wird) und dest (Destination das Ziel mit Endung *.zip)- Vorsicht: Sie brauchen sich nicht irgendwelche suspekten Exe-Dateien oder Bibliotheken oder dll`s downloaden. Das ging übrigens schon seit Urzeiten so und der Sternenhimmelstuermer staunt, dass teilweise gestandene Admins ein Zusatzprogramm nutzen. Die Links hier sind seriös! Die Nachteile: Ist halt aus Windows 98 -Zeiten und der Komprimierungsgrad und die Schnelligkeit ist bei PDF`s und Doc`s...suboptimal - ursprünglich war das Mal für *.bac- Dateien gedacht - windows 98 lässt grüßen... Demo eine Zelle tiefer!
|
Das Einbinden in die HTA ist wie
immer möglich. Sie erstellen zwei Textäreafelder und einen Run-Button. Danach tauschen
Sie im Script die Pfade gegen unsere BasicTextArea.Value und
BasicTextArea1.Value - müsste ohne
Anführungszeichen sein - bin zu faul das auszuprobieren - falls
Probleme, bitte posten.... Sie sollen ein wenig selbst das Gefühl zum Coden entwickeln... |
Unzip | Englisch: Text kopieren und Dateiendung in *.vbs umbenennen | ||
Dialogfenster für Ordnerexplorer aufrufen und Pfadausgabe | Der
Aufruf des Dialogfensters vom Explorer zum Suchen von Ordnern ist eine
sinnvolle Ergänzung und sieht megaprofessionell aus. In der Demo-HTA Ordner aussuchen und kompremieren wird aus zwei VB-Schnipseln eine "sinnvolle" Anwendung : Schauen Sie sich die Demo an... Die Nachteile der Demo: Ist halt aus Windows 98 -Zeiten und der Komprimierungsgrad und die Schnelligkeit ist bei PDF`s und Doc`s... beim Zippen suboptimal - ursprünglich war das Mal für *.bac- Dateien gedacht - windows 98 lässt grüßen... Wir brauchen diesmal keine grafische Oberfläche - die ist im Auswahlmenü implizit vorhanden -:) In einer Batch würde der Sternenhimmelstuermer das mit einem wait-Befehl koppeln, die VBS starten und danach den Text abgreifen... Die Ausgabe in eine Textdatei ist wie immer easy - Ordnerpfad.path ist unsere Ausgabevariable und mit objFile.WriteLine Ordnerpfad.path ist das nach Schema F schnell erledigt. Wenn Sie das immer noch nicht können sollten, dann schauen Sie mal ein wenig weiter oben in der Tabelle - Wiederholung macht den Meister.... |
Auswahl = "Ordner auswählen und im selben Ordner befindet sich die gezippte Datei" StartOrdner = "C:\" Set Auswahl = CreateObject("Shell.Application").BrowseForFolder(0,Auswahl,16,Ordner) If TypeName(Auswahl) = "Nothing" Then MsgBox "Abbruch" WScript.Quit Else Set Ordnerpfad = Auswahl.Self End If Dim src Dim dest src = Ordnerpfad.path dest = Ordnerpfad.path & ".zip" 'write zip file header Set fso = createobject("Scripting.FileSystemObject") Set file = fso.OpenTextFile(dest, 2, True) file.write "PK" & chr(5) & chr(6) & string(18,chr(0)) file.close Set shl = createobject("Shell.Application") shl.namespace(dest).copyhere shl.namespace(src).items Do until shl.namespace(dest).items.count = shl.namespace(src).items.count wscript.sleep 100 Loop Dieser rote Teil ist für das Zippen zuständig - der erste Teil der an sich wichtige - ist aber zusammen eine neue Anwendung - irgendwie Cool - selbst zusammengebastelt... |
Also, der Text in der ersten Reihe wird Ihnen in der Dialogbox angezeigt. Der
Start des Dialogfensters ist Laufwerk c:\ Den Startpunkt können Sie beliebig ändern Es wird ein BrowserForFolder - Menü angezeigt. Die Parameter sind erst einmal unerheblich - funktioniert so... Wenn (if) nichts ausgewählt, dann kommt wieder eine MSGBOX mit Textinhalt Abbruch - ist wieder so eine Ausgabe im Windowsfensterstil.. Folge: Script wird abgebrochen...ansonsten (else) wird der ausgewählte Ordnerpfad als Auswahl gespeichert ---Danach wird die Quelle (src) als unsererer Ordnerpfad definiert. Hier könnte auch manuell "c:\beliebiger Pfad" stehen. Als Destination (dest=Ziel) wird wieder der Pfad zu unserem Ordner/Verzeichnis gelegt - diesmal aber die Endung .zip durch das & angehängt. Im Zielordner wird also eine Zip-Datei gleichen Namens erstellt. Bei dest könnten Sie wieder "c:\beliebiger Pfad" eintragen nur C:\ alleine würde nicht gehen, denn C:\.zip wäre kein logischer Pfad...Verstanden? Sobald Sie aber eine Hierarchie tiefer gehen c:\belName ist der Pfad zur Zip C:\belName.zip! Wie dem auch sei - der zweite Teil des Scripts zippt den Ordner: Schauen Sie dann im Link nach oder googlen nach den Befehlen ist sonst zu lang.... Diesmal den Text kopieren und in beliebigerName.vbs umbenennen. Nach Doppelklick öffnet sich ein Dialogfenster Ordner aussuchen und mit O. K. bestätigen: Demo : ordner.vbs Die fertige kompremierte Datei liegt im Ordner - sehr fehlerträchtig, langsam, nicht sehr empfehlenswert aber nicht distruktiv - die alten Dateien bleiben, wo Sie sind! Kopien sind im Zip-Archiv - also keine wirkliche Gefahr... |
Dialogfenster für Dateien und Ausgabe des Pfades in einem Dialogfeld |
Das
Aufrufen eines Dialogfensters für Dateien und Kopieren des Pfades
reinem VB-Script ist ein wenig schwierig und wurde auf dieser Seite mit
VBS: VBS zeigt Dateipfad an, Für HTA sind das nur zwei Zelien Code: im Body: <div><input Application="True" type="file" id="FileName" /><div> |
Diesmal etwas außergewöhnlich im Headbereich ohne VB-Script-Tag: <hta:application applicationname="Open File" border="dialog" borderstyle="normal" caption="Open File" contextmenu="no" maximizebutton="no" minimizebutton="no" navigable="no" scroll="no" selection="no" showintaskbar="no" singleinstance="yes" sysmenu="no" version="1.0" windowstate="minimize"> |
Funktionsweise: Es wird Ihnen
ein leeres Textfeld mit einem Button mit der Aufschrift "Durchsuchen"
angezeigt. Wenn Sie den Button durchsuchen anklicken, so wird das
Explorer-Dialogfenster zur Suche von beliebigen Dateien angezeigt. Dort
suchen Sie wie gewohnt die Datei aus. Der Dateipfad wird dann im
Inputfeld angezeigt.Der Umweg über das Inputfeld ist Pflicht... Ansonsten wieder ein Beispiel, dass ein Textdokument erstellt oder in ein bestehendes den ausgewählten Pfad anzeigt |
URL (Internetadressen) aus
geöffnetem Broser extrahieren |
Internetadresse, Datum und
Uhrzeit ergänzend bei Betätigung des VBS in ein Textdokument eintragen.
Der Sternenhimmelstuermer schrieb dazu eine Abhandlung - auch die
Weiterverarbeitung mit der CMD wird berücksichtigt! |
Dim browserurl Set browserurl = CreateObject("Shell.Application").Windows If browserurl.Count > 0 Then For Each oWindow In browserurl If UCase(Right(oWindow.FullName, 12)) = "IEXPLORE.EXE" Then adresse = oWindow.LocationURL & " " & date & " " & time End If Next End If Dim fso Set fso = CreateObject("Scripting.FileSystemObject") if fso.FileExists("test.log") then Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("test.log", 8) objFile.WriteLine adresse objFile.Close else Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("test.log") Set objFile = objFSO.OpenTextFile("test.log", 2) objFile.WriteLine adresse objFile.Close end if |
Interessant sind die blauen
Zeilem. Die weißen sind fast eine Originalkopie von dem Tabellenpunkt
Datenbank: Textära. Ist noch kein Log-Dokument da, so wird es erstellt, ist eins da, so wird es ergänzt. In der Kommandozeilensprache braucht man nicht so ein wust - da reichen die Ausgabezeichen >> (in verdoppelter Form - das erstellt auch - falls benötigt - ein neues Dokument. Dim browserurl Set browserurl = CreateObject("Shell.Application").Windows Variable wird wieder erstellt wichtig ist nur die zweite Zeile nach dem Gleichheitszeichen. If browserurl.Count > 0 Then Kurze Überprüfung, ob eine Adresse im folgenden Objekt ist: For Each oWindow In browserurl If UCase(Right(oWindow.FullName, 12)) = "IEXPLORE.EXE" Ab if wird es absolut interessant: Hier wird endlich nach lauter Definitionen die Browseradresse extrahiert. Then adresse = oWindow.LocationURL & " " & date & " " & time Das Ergebnis wird als Variable gespeichert. Zusätzlich werden Datum und Zeit mit Leerzeichen als Separatoren abgespeichert. Date und time sind fest definierte Variablen von Uhrzeit und Datum zum Zeitpunkt der Erfassung... Adresse ist wiederum Grundlage für die Entscheidung, ob die Variable Adresse als Text hinzugefügt wird (8), also nicht distruktiv im test.log angehängt wird oder ein neues Dokument erstellt wird (2) |
mit Hyperlink in HTA
beliebige ausführbare Datei oder Ordner öffnen. |
<html> <head> <title>HTA Helpomatic</title> <HTA:APPLICATION ID="objHTAHelpomatic" APPLICATIONNAME="HTAHelpomatic" SCROLL="yes" SINGLEINSTANCE="yes" WINDOWSTATE="maximize" > <style type="text/css"> a {color:#FFFF33; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none} a:hover {color:#FF0000; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none} a.menu1 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none} a.menu1:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none} a.menu2 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none} a.menu2:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none} </style> </head> <body style="color: white; background-color: black;" alink="red" link="yellow" vlink="#3333ff"> <p class=MsoNormal><span lang=DE style='font-weight:normal'><a href="c:\windows">Offline Hyperlink zum Oeffnen des Ordner windows</a></span></p> <br> </body> </html> |
Die Datei diesmal ein wenig mit
CSS formatiert - egal, wichtig ist eigentlich nur die Zeile: <p class=MsoNormal><span lang=DE style='font-weight:normal'><a href="c:\windows">Offline Hyperlink zum Oeffnen des Ordner windows</a> Damit kann ein Ordner oder eine ausführbare Datei (*.bat) aus der HTA ausgeführt werden... Tauschen Sie einfach den Dateipfad aus und geben dem Hyperlink einen aussagekräftigen nahmen. Funktioniert übrigens auch mit einem HTML-Dokument, aber nur mit dem Internet Explorer und offline, also auf dem heimischen PC... So können Sie sich ein schönes Menü für Ihre BatchDateien basteln. Bei Batchdateien kommt eine Warnmeldung (gelb umrandet und die Auswahloptionen Speichern oder Ausführen per Button - Wer jetzt den falschen Button drückt, speichert eben nochmal die Datei... Die Abfrage ist eine logische Konsequenz der Sicherheitspolitik und keine Schikane. Ansonsten könnten böswillige Menschen ganz schönen Schadn anrichten... |
|
Textdokument in HTA-Textarea impotieren |
Es muss ein Textdokument mit irgendein.txt zusätzlich vorliegen,aus dem der Inhalt ausgelesen wird. Der Name des Textdokumentes kann natürlich angepasst werden... Das Dokument muss ohne Pfadangabe relativ zur HTA liegen. Mit Pfadangabe funktioniert es natürlich auch... Es kursieren auch Skripte mit Schleifen und read im Internet, was aber totaler Quatsch ist, wenn man den ganzen Inhalt eines Textdokumentes in eine Textarea importieren will. Siehe auch Spezialthema VBS und Javascript in HTA |
<SCRIPT Language="VBScript"> Sub RunScript set oFSO1=CreateObject("Scripting.FileSystemObject") set oFile2=oFSO1.OpenTextFile("irgendein.txt",1) text1=oFile2.ReadAll document.all.BasicTextArea.value=text1 oFile2.Close End Sub </SCRIPT> <body> <div><textarea name="BasicTextArea" rows="5" cols="75"></textarea> </div> <br> <div>Jetzt noch ein Run-Button</div> <input id=runbutton class="button" type="button" value="Run Button" name="run_button" onClick="RunScript"> </body> |
Der Import eines Textdokumentesmit gesamten Inhalt wird mit dem Befehl readAll realisiert. Statt text1 können Sie jeden beliebigen Variablennamen nehmen. Bei der mehrfachen Verwendung des Skriptes müssen Sie unterschiedliche Variablennamen verwenden. Deshalb wurden vom Autor Nummern an die freien Variablen angehängt. Diese Nummern müssen Sie bei mehrfacher Verwendung ändern - ansonsten funzt es nicht. Eine einfache demo ohne irgendein.txt gibt es hier zum Download |
Aufruf von Javascriptfunktion |
irgendeinjs() |
Richtig, eine Zeile mit Funktionsnamen des Javascriptes. Das VBS arbeitet Zeile für Zeile - diesem entspricht der Inhalt der Funktion. Kann überall dort stehen, wo Sie es brauchen, also am Anfang, Mitte und Ende der Funktion. Variablenübergabe geht am besten über oben angegebene Textarea. Danach wieder mit vbs auslesen - die Textarea wird zur Zwischenablage...genauso arbeitet VBS mit virtuellen Dokumenten oder der Sternenhimmelstuermer mit Batches. Siehe auch Spezialthema VBS und Javascript auf dieser Seite! |
Es können auch verschachtelte Funktionen erstellt werden - VBS startet Javascript - Javascript startet andere Javascripts...: <script language="JavaScript"> function irgendeinjs(){ enctdrei(); encode(); enctwo(); } </script> |
Frames |
|||
einfacher Framewechsel mit Run-Button |
Dateiname Frame.hta <head> <title>HTA Hilfe für Batchschreiber</title> <HTA:APPLICATION APPLICATIONNAME="HTAHilfe" SCROLL="yes" SINGLEINSTANCE="yes" WINDOWSTATE="maximize" > </head> <frameset rows="50%,50%"> <frame application="yes" src="frame_1.htm"> <frame application="no" src="frame_2.htm" name="frame_2"> </frameset> Dateiname: frame_2.htm <htm> <BODY> <div>Das ist ein ursprünglicher Frame<div> </BODY> </htm> Dateiname frame_wechsel.htm <html> <BODY> <div>Das ist ein Frame nach einem Framwechsel...</div> </BODY> </html> |
Dateiname: frame_1.htm <html> <head> <title>HTA Hilfe für Batchschreiber</title> <HTA:APPLICATION APPLICATIONNAME="HTAHilfe" SCROLL="yes" SINGLEINSTANCE="yes" WINDOWSTATE="maximize" > </head> <SCRIPT Language="VBScript"> Sub RunScript WINDOW.PARENT.FRAME_2.LOCATION.HREF="frame_wechsel.htm" End Sub </SCRIPT> <body> <div>Der Framewechsel erfolgt nach Betätigung des Buttons</div> <br> <input id=runbutton class="button" type="button" value="start" name="run_button" onClick="RunScript"> <br> <br> <body> <html> |
Alle Dateien in einen Ordner (relative Links). Mit einem Doppelklick auf die Frame.hta wird die Anwendung gestartet. frames.hta: Doppelklicken. Die ausführenden VBScripts müssen in den anderen HTM-Frames sein, da nur das Frameset in Frame.hta ausgelesen wird und andere Befehle ignoriert werden. Es können keine HTA-Dateien mit der Frame.hta in einen Frame geladen werden - es sei denn die hta soll wiederum als einzelne Instanz geöffnet werden-:) Rows und cols: Das ist die Angabe, ob es zwei Frames übereinander (row) oder nebeneinander (cols) gibt. Der Sternenhimmelstuermer schlägt eine Angabe in Prozent danach vor, damit sich die Fenster im Browser anpassen. Die beiden Frames frame_1.htm und frame_2.htm Im ersten Frame_1 ist die Hauptanwendung, nämlich ein Start-Button, der den Framewechsel auslöst. Unter dem Headbereich von frame_1.htm ist die Ausführungsroutine im VBS. WINDOW.PARENT.FRAME_2.LOCATION.HREF="frame_wechsel.htm" ist der Pfad zur Framewechselseite. Das Sub RunScript wird durch Betätigen des Buttons im Bodybereich durch den User ausgelöst: <input id=runbutton class="button" type="button" value="start" name="run_button" onClick="RunScript"> Tipp: Natürlich können Sie auch mit einem Betätigen des Buttons zwei Frames ändern: Einfach dem zweiten Frame einen Namen geben in frames.hta - in der Art: src="frame_1.htm" name="frame_1"> Dann noch in frame_1.htm eine Zeile in der Art: WINDOW.PARENT.FRAME_1.LOCATION.HREF="frame_wechsel.htm" hinzufügen. Warum geht das? Im VBS Script werden die einzelnen Befehle innerhalb des Sub Runscripts abgearbeitet - ob da nun ein Frame gewechselt wird oder zwei ist so ziemlich egal - Sie könnten auch eine Zeitschleife einbauen und das Ergebnis für zehn Sekunden anzeigen lassen, um dann wieder zum alten Frame zurückzukehren...VBS ist echt flexibel, wenn man die Grundkenntnisse hat... |
Ausgabe von Ergebnissen ohne Frame in DIV- Container (Es können beliebige HTML, TXT oder andere unformatierte Dokumente verwendet werden; HTML-Seiten werden in Exploreransicht mit ausführbaren Links angezeigt) Eigenentwicklung aus Fragmenten aus dem Internet ... |
<html> <head> <title>TEST</title> <hta:application scroll="no" windowState="normal"> <style type="text/css"> .auto { background: #00BFFF; height: 300px; overflow: auto; width: 400px; border: 1px solid #000; padding: 10px; } </style> </head> <script language="VBScript"> sub Rundoku set oFSO=CreateObject("Scripting.FileSystemObject") set oFile=oFSO.OpenTextFile("irgendein.htm",1) text=oFile.ReadAll document.all.DataArea.InnerHTML = text oFile.Close end sub </script> <body> <div id=DataArea class="auto"><center><input id=runbutton class="button" type="button" value="Ergebnis" name="run_button" onClick="Rundoku"></center></div> </body> </html> |
Statt irgendein.htm kann
da auch stehen
irgendein.html oder
irgendein.txt oder irgendein.log...eben
alle unverschlüsselten Textdokumente. HTMl wird im <div> Element als HTML interpretiert. Das Skript besteht aus vier Elementen - HTA-Grundgerüst - CSS - VB-Skript - Body mit DIV-Container Im CSS-Bereich (<style type="text/css">) werden die Scrollbalken (automatisch) und die Größe in Pixel definiert. Im VB-Skript wird der Ausführungscode (Rundoku) für den Button (Ergebnis) im DIV-Container des Bodys geschrieben. Die erste Hälfte des VB-Skripts liest das Dokument ein. Das Ergebnis wird als Variable (text) an den Innerhtml - Befehl übergeben. Der adressiert lediglich, dass die Variable(text) in den Pfad der Anwendung geschrieben wird - nämlich in den DIV-Container(DataArea). Ist wirklich easy, ersetzt Frames und ermöglicht im Design neue Möglichkeiten. Bei Frames haben Sie z. B. bei Verwendung von about blank nicht die Möglichkeit, eine andere Farbe zuzuweisen. Ist wirklich lustig und easy vom Code her. Die ID vom Container können Sie natürlich beliebig ändern - wenn der Sternenhimmelstuermer DataArea verwendet, so ist das ein Zugeständnis an die Nomenklatur.. |
Sobald der Ergebnis -
Button im Div-Container aktiviert wird, wird er durch den Text (Name
des Textdokumentes mit Endung *txt,
den Sie eingeben müssen und das im selben Ordner, liegt)
oder die HTML-Seite abgelöst, die in dieser Variante relativ im gleichen Ordner liegen muss. Der Ergebnis-Button kann natürlich auch außerhalb des Containers platziert werden. So verschwindet er mit Betätigung und wird durch das Ergebnis abgelöst. Die CSS-Formatierung ist das Gelbe vom Ei dabei: Durch Sie wird die Höhe und Breite des DIV-Containers in Pixel bestimmt. Durch den Overflow-Befehl im CSS werden Scrollbalken automatisch gesetzt. Das ist bei einer HTA megawichtig, da die Alternative mit einem Span (<span id=DataArea> </span><p>) im Body ziemlich holprig und unformatiert ist... Die dritte Alternative im Body wäre, wie oben im Link angegeben, eine Textärea zu definieren (<textarea name="DataArea" rows=20 cols=70></textarea><p>). Der Nachteil wäre hier, dass Text oder html unformatiert und bei HTML der Quellcode eben als Text angezeigt wird, was ja durchaus erwünscht sein kann. Vorsicht! Das o. a. Skript dürfte mit dieser Zeile nicht funktionieren. Der Sternenhimmelstuermer braucht das nicht einmal zu testen. Warum? Der Run-Button würde jede Funktionalität verlieren, da er als simpler Text ausgedruckt wird. Ist also nichts mit Hyperlinks und Co... |
Einen Frame bauen, um Ergebnisse aus einem Textdokument in einer HTA zu laden |
Drei Dateien kopieren und in einen Ordner legen. Dann frame.hta starten Frame.hta (Der Name ist nicht wirklich interessant, aber die Endung ist *.hta) <head> <title>HTA Hilfe für Batchschreiber</title> <HTA:APPLICATION APPLICATIONNAME="HTAHilfe" SCROLL="yes" SINGLEINSTANCE="yes" WINDOWSTATE="maximize" > </head> <frameset rows="50%,50%"> <frame application="yes" src="cassandra.htm"> <frame application="no" src="about:blank" name="frame2"> </frameset> ---- cassandra.htm (Der Name ist Pflicht...) <html> <head> <title>HTA Hilfe für Batchschreiber</title> <HTA:APPLICATION APPLICATIONNAME="HTAHilfe" SCROLL="yes" SINGLEINSTANCE="yes" WINDOWSTATE="maximize" > <style type="text/css"> a {color:#FFFF33; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none} a:hover {color:#FF0000; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none} a.menu1 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none} a.menu1:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none} a.menu2 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none} a.menu2:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none} </style> </head> <SCRIPT Language="VBScript"> Sub RunScript Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("suchwort.log") Set objFile = objFSO.OpenTextFile("suchwort.log", 2) objFile.WriteLine BasicTextBox.Value objFile.Close dim shell set shell = createobject("wscript.shell") shell.run """probe.bat""", 1, true WINDOW.PARENT.FRAME2.LOCATION.HREF="NEW.HTM" End Sub </SCRIPT> <body style="color: white; background-color: black;" alink="red" link="yellow" vlink="#3333ff"> <br> <br> <br> <center><div><big><big><big><span style="color: red;">賬 cassandra 賬</span></big></big></big></div><c/enter> <br> <br> <div><input type="text" name="BasicTextBox" size="100"></div> <br> <div>Der Eingabetext wird in dem leeren Frame nach Betätigen des Buttons angezeigt</div> <br> <input id=runbutton class="button" type="button" value="start" name="run_button" onClick="RunScript"> <br> <br> <body> <html> ---- probe.bat set destination=%~dp0% >"%destination%New.htm" ECHO ^<html^> >>"%destination%New.htm" ECHO ^<BODY^> set /p ergebnis=<suchwort.log >>"%destination%New.htm" ECHO %ergebnis% >>"%destination%New.htm" ECHO ^</BODY^> >>"%destination%New.htm" ECHO ^</html^> del suchwort.log |
Frame.hta (Der Name ist
nicht wirklich interessant, aber die Endung ist *.hta) <head> <title>HTA Hilfe für Batchschreiber</title> <HTA:APPLICATION APPLICATIONNAME="HTAHilfe" SCROLL="yes" SINGLEINSTANCE="yes" WINDOWSTATE="maximize" > </head> <frameset rows="50%,50%"> <frame application="yes" src="cassandra.htm"> <frame application="no" src="about:blank" name="frame2"> </frameset> Hier wir der Frame definiert. Verteilung 50% zu 50 %. Die folgenden Frames sind oben und unten. Schauen Sie sich eine Dokumentation von Frameset an. Einfach mal googlen, wie Sie rechts und links oder sonst irgendwie Frames setzen (row untereinander, cols nebeneinander als grobe Richtung). Die Ausnahme zum herkömmlichen Frame ist <frame application="yes" . Hier bestimmen Sie, ob im Frame Applikationen ausgeführt werden können. Damit ist in der Regel VBS gemeint. Für den oberen Frame src="cassandra.htm"> ist also VBS zugelassen. Anders im unteren Frame <frame application="no" src="about:blank" name="frame2">. Hier ist kein VBS nötig: also ein klares nein bzw. no...Der Name des Frames ist die eindeutige ID und deshalb wichtig. Als Verlegenheitslösung nehmen wir eine leere unbeschriebene Seite als URL (internetadresse: about:blank). Spart Schreibarbeit ---- <SCRIPT Language="VBScript"> Sub RunScript Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CreateTextFile("suchwort.log") Set objFile = objFSO.OpenTextFile("suchwort.log", 2) objFile.WriteLine BasicTextBox.Value objFile.Close dim shell set shell = createobject("wscript.shell") shell.run """probe.bat""", 1, true WINDOW.PARENT.FRAME2.LOCATION.HREF="NEW.HTM" End Sub </SCRIPT> Das Script in der VBS erzeugt ein Log-Dokument mit der Eingabe des Users. Dann startet es die Batch und wartet auf Das Ergebnis. Die Batch generiert ein HTML-Dokument mit der Eingabe des Users und schleißt sich. Danach verarbeitet das Skript das neue HTM-Dokument und zeigt es im Frame an : Diese drei Zeilen im Body generieren ein Textfeld für die Eingabe des Users <div><input type="text" name="BasicTextBox" size="100"></div> <input id=runbutton class="button" type="button" value="start" name="run_button" onClick="RunScript"> Die Batch generiert eine neue HTML-Seite der Code wird im letzten Punkt außerhalb der Tabelle erklärt... probe.bat set destination=%~dp0% >"%destination%New.htm" ECHO ^<html^> >>"%destination%New.htm" ECHO ^<BODY^> set /p ergebnis=<suchwort.log >>"%destination%New.htm" ECHO %ergebnis% >>"%destination%New.htm" ECHO ^</BODY^> >>"%destination%New.htm" ECHO ^</html^> del suchwort.log Erstmal bestimmt die Batch ihre Lage und schreibt den Ordnerpfad in die Variable destination. set destination=%~dp0% In diesem Pfad (der muss absolut sein) wird ein New.htm geschrieben. Erste Zeile > destruktiv, weitere Zeilen ergänzend >> (>>"%destination%New.htm" ECHO ^<BODY^>) Mit dem Echo-Befehl wird Zeile für Zeile geschrieben. Was hinter Echo steht, ist Text für New.htm. Na ja, es gibt noch eine kleine Besonderheit: in htm steht fast alles in <Tags> . Und gerade die blöden Dinger sind Eingabe < oder Ausgabezeichen > für Batches. Deshalb muss immer davor ein ^< Escapezeichen stehen. In der nächsten Zeile wird die Variable %ergebnis% (in Batch mit zwei Prozentzeichen) nun im Echo-Befehl verbraten, also der Eingabetext in das Dokument geschrieben >>"%destination%New.htm" ECHO ^<div^>%ergebnis%^</div^>. Dann wird noch schnell das Dokument beendet. Das ist jetzt ein mieses HTML-Gerüst, da der Headbereich fehlt, aber als Demo... Zu guter letzt wird der suchwort.log vernichtet. Die Usereingabe wurde ja bereits ins HTML-Dokument übernommen. |
Die drei Dateien müssen in einem Ordner liegen. Die Frame.hta wird mit Doppelklick ausgeführt. Der Rest ist easy: Geben Sie irgend einen Satz ein und drücken den Start-Button. Ihre Eingabe wird in ein Log-Dokument geschrieben. Die Batch liest das Dokument aus und erstellt ein Html-Dokument. Das wird als Frame, nachdem die Batchbearbeitung fertig ist. Dieses simuliert eine typische Batch und HTA als GUI Situation: Eine Eingabe wird vom User der Batch übergeben. Diese verarbeitet die Eingaben und am Ende wird das Ergebnis in der HTA angezeigt. Für diesen simplen Sachverhalt schrieb sich der Sternenhimmelstuermer die Finger wund.... |