; WshShell-Objektmodell $objShell = ObjCreate("WScript.Shell") #cs Programme ausführen Run, Exec Arbeiten mit Spezialordnern SpecialFolders Arbeiten mit Verknüpfungen CreateShortcut Arbeiten mit Umgebungsvariablen Environment, ExpandEnvironmentStrings Arbeiten mit dem Ereignisprotokoll LogEvent Arbeiten mit der Registrierung RegRead, RegWrite, RegDelete Tastendrücke an Anwendungen senden AppActivate, SendKeys Abfragen des aktuellen Verzeichnisses des Scripts CurrentDirectory Zeitgesteuerte Dialogfenster erstellen Popup #ce ; Programme ausführen ; Methoden: Run und Exec ; Syntax für Run Run('File' [, 'Fensterstil=Integer' [, 'Wait=False']]) ; Werte für den Parameter Window-Stil der Methode Run #cs 0 Verstecktes Fenster 1 Aktiviert das Fenster und zeigt es an. Wenn das Fenster minimiert oder maximiert ist, werden Originalgröße und -position des Fensters wiederhergestellt. 2 Aktiviert das Fenster und zeigt es minimiert an. 3 Aktiviert das Fenster und zeigt es maximiert an. 4 Zeigt das Fenster mit seiner letzten Größe und Position an. Das aktive Fenster bleibt aktiv. 5 Aktiviert das Fenster und zeigt es mit seiner aktuellen Größe und Position an. 6 Minimiert das Fenster und aktiviert das nächste Fenster in Z-Reihenfolge. Bei der Z-Reihenfolge handelt es sich um eine Liste, in der die Fenster aktiviert werden. Sie können die Liste sehen, wenn Sie ALT+TAB drücken. 7 Zeigt das Fenster minimiert an. Das aktive Fenster bleibt aktiv. 8 Zeigt das Fenster in seinem Zustand an. Das aktive Fenster bleibt aktiv. 9 Aktiviert das Fenster und zeigt es an. Wen das Fenster minimiert oder maximiert ist, dann werden seine Originalgröße und -position wiederhergestellt. 10 Setzt den Anzeigezustand des Fensters auf Basis des Anzeigezustands des Programms, das die Anwendung gestartet hat. #ce ; Die Konstanten-Deklaration der Parameter ist nicht zwingend erforderlich. ; Das Einsetzen des numerischen Wertes erfüllt denselben Zweck. ; Das Setzen der Konstanten verbessert aber die Lesbarkeit des Codes. Const $HIDDEN_WINDOW = 0 Const $RESIZEPOS_WINDOW = 1 Const $MINIMIZE_WINDOW = 2 Const $MAXIMIZE_WINDOW = 3 Const $LAST_SIZE_POS_WINDOW_ACTIVE_NO_CHG = 4 Const $CURRENT_SIZE_POS_WINDOW = 5 Const $MINIMIZE_WINDOW_ACTIVATE_NEXT_Z = 6 Const $MINIMIZE_WINDOW_ACTIVE_NO_CHG = 7 Const $SHOW_AS_IS_WINDOW_ACTIVE_NO_CHG = 8 Const $ACTIVATE_WINDOW_RESIZEPOS_AFTER_MIN_MAX = 9 Const $WINDOW_STATE_LIKE_APPL_STATE = 10 ; Notepad maximiert starten $objShell = ObjCreate("WScript.Shell") $objShell.Run("notepad.exe", $MAXIMIZE_WINDOW) ; Anmerkung: ; Der Parameter Windows-Stil wird nicht von allen Anwendungen verarbeitet. ; Die Systemsteuerung (control.exe) wird zum Beispiel immer in der gleichen Form geöffnet - ; egal welcher Fensterstil im Script definiert wurde. ; Befehlsausführung abwarten ; Run akzeptiert als dritten Parameter 'TRUE' oder 'FALSE', voreingestellt ist 'FALSE'. ; Wird 'TRUE' gesetzt wird mit der Skriptabarbeitung gewartet, bis das gestartete Programm ; beendet wurde. ; Bsp.: Rechner aufrufen und erst nach Beendigen Skript fortsetzen $objShell = ObjCreate("WScript.Shell") $objShell.Run("calc.exe", 1, True) MsgBox(0, '', "Script completed.") ; Ausführen von Kommandozeilentools ; möglich mit Run und Exec ; %comspec% /k Kommandozeilenfenster bleibt offen ; %comspec% /c Kommandozeilenfenster wird geschlossen $objShell = ObjCreate("WScript.Shell") $objShell.Run("%comspec% /K dir", 1, True) ; Programm ausführen und auf dessen Ausgaben zugreifen ; Methode Exec $objShell = ObjCreate("WScript.Shell") ; Ping absetzen $IP = '192.168.178.1' $objExecObject = $objShell.Exec("cmd /c ping -n 3 -w 1000 " & $IP) Do $strText = $objExecObject.StdOut.ReadLine() If StringInStr($strText, 'Antwort', 1) = 1 Then MsgBox(0, '', "Antwort erhalten.") ExitLoop EndIf Until $objExecObject.StdOut.AtEndOfStream ; Konfiguration Netzwerkadapter abfragen $objExecObject = $objShell.Exec("%comspec% /c ipconfig.exe") $str = '' Do $strLine = $objExecObject.StdOut.ReadLine() If StringInStr($strLine, "Adresse", 1) Then $str &= $strLine & @LF ElseIf StringInStr($strLine, "maske", 1) Then $str &= $strLine & @LF ElseIf StringInStr($strLine, "gateway", 1) Then $str &= $strLine & @LF EndIf Until $objExecObject.StdOut.AtEndOfStream MsgBox(0, 'Konfiguration', $str) ; Verknüpfungen ; Objekt WshShortcut #cs Arguments Zusätzliche Kommandozeilenargumente, die Sie beim Start der Anwendung verwenden können. Description Beschreibung der Verknüpfung. FullName Nur-Lese-Eigenschaft, die den vollständigen Pfad zur Zielanwendung angibt. HotKey Tastenkombination: Eine Tastenkombination, über die die Anwendung gestartet werden kann. Tastenkombinationen setzen sich normalerweise aus einer der folgenden Tasten plus einem Buchstaben (a-z), einer Zahl (0-9) oder einer Funktionstaste (F1-F12) zusammensetzen: ALT STRG HOCHSTELLTASTE Wenn Sie die Eigenschaft angeben, müssen Sie für die Taste STRG den Wert CTRL und für die Hochstelltaste den Wert SHIFT angeben. Für die Tastenkombination STRG und 9 verwenden Sie beispielsweise den folgenden Wert: Ctrl + 9 Wenn die Tastenkombination bereits verwendet wird, dann wird sie überschrieben und der neuen Verknüpfung zugewiesen. IconLocation Ermöglicht Ihnen die Angabe einen Symbols und eines Symbolindexes für die Verknüpfung. Wenn nichts angegeben wird, dann wird das Standardsymbol der Anwendung verwendet. TargetPath Vollständiger Pfad zur Zielanwendung. Sie müssen einen vollständigen Pfad (inklusive des Laufwerkbuchstabens) oder einen UNC-Pfad angeben. Der angegeben Wert wird nicht überprüft. WindowStyle Fenstertyp der gestarteten Anwendung. Die möglichen Werte entsprechen den Werten der Methode Run. WorkingDirectory Arbeitsverzeichnis der Anwendung. #ce ; Verknüpfung zum Windows-Taschenrechner auf dem Desktop. ; Zusätzlich Tastenkombination STRG-HOCHSTELLTASTE+T $objShell = ObjCreate("WScript.Shell") $strDesktopFolder = $objShell.SpecialFolders("AllUsersDesktop") $objShortCut = $objShell.CreateShortcut($strDesktopFolder & "\Calculator.lnk") With $objShortCut .TargetPath = "%SystemRoot%\System32\calc.exe" .Description = "Taschenrechner starten." .HotKey = "Ctrl+Shift+T" .Save EndWith ; Verknüpfung zur AutoIt-URL auf dem Desktop $objShell = ObjCreate("WScript.Shell") $strDesktopFld = $objShell.SpecialFolders("Desktop") $objURLShortcut = $objShell.CreateShortcut($strDesktopFld & "\AutoIt.url") With $objURLShortcut .TargetPath = "http://www.autoit.de/jgs_portal.php?sid=" .Save EndWith ; Element zur Schnellstartleiste hinzufügen $objShell = Objc("WScript.Shell") $colEnvironmentVariables = $objShell.Environment("Volatile") $strQLFolder = $colEnvironmentVariables.Item("APPDATA") & _ "\Microsoft\Internet Explorer\Quick Launch" $objURLShortcut = $objShell.CreateShortcut($strQLFolder & "\AutoIt.url") With $objURLShortcut .TargetPath = "http://www.autoit.de/jgs_portal.php?sid=" .Save EndWith ; Löschen von Verknüpfungen $objShell = ObjCreate("WScript.Shell") $colEnvironmentVariables = $objShell.Environment("Volatile") $objFSO = ObjCreate("Scripting.FileSystemObject") $strQLFolder = $colEnvironmentVariables.Item("APPDATA") & _ "\Microsoft\Internet Explorer\Quick Launch\AutoIt.url" $objFSO.DeleteFile($strQLFolder) ; Spezialordner (Collection SpecialFolders) ; Hiermit kann AUSSCHLIESSLICH der Pfad des Ordners abgefragt werden. #cs AllUsersDesktop Desktopinhalte, die allen Benutzern angezeigt werden. AllUsersStartMenu Startmenüeinträge, die allen Benutzern angezeigt werden. AllUsersPrograms Einträge im Menü Programme, die allen Benutzern angezeigt werden. AllUsersStartup Programme, die für alle Benutzer beim Systemstart ausgeführt werden. Desktop Desktopinhalte, die nur dem aktuellen Benutzer angezeigt werden. Favorites Einträge in den Favoriten des aktuellen Benutzers. Fonts Installierte Schriften MyDocuments Ordner Meine Dokumente des aktuellen Benutzers. NetHood Objekte, die im Ordner Netzwerkumgebung angezeigt werden. PrintHood Drucker Recent Objekte, die unter dem Menüpunkt Dokumente im Startmenü angezeigt werden (für den aktuellen Benutzer). SendTo Optionen im Menü Senden an im Kontextmenü nach einem Rechtsklick im Windows Explorer. StartMenu Startmenü des aktuellen Benutzers. Startup Programme, die für den aktuellen Benutzer beim Systemstart ausgeführt werden. Templates Anwendungsvorlagen des aktuellen Benutzers. #ce ; Speicherort des Spezialordners 'Fonts' $objShell = ObjCreate("WScript.Shell") $strFontDirectoryPath = $objShell.SpecialFolders.Item("Fonts") MsgBox(0, "Pfad zum Ordner Font", $strFontDirectoryPath) ; Verknüpfung mit SciTE im Spezialordner 'Senden an' erstellen ; um z.B. htm-Dateien per Kontextmenü in SciTE zu öffnen $objShell = ObjCreate("WScript.Shell") $Path = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\SciTE.exe', '') $strSendToFolder = $objShell.SpecialFolders("SendTo") $strPathToScite = $objShell.ExpandEnvironmentStrings($Path) $objShortcut = $objShell.CreateShortcut($strSendToFolder & "\SciTE.lnk") $objShortcut.TargetPath = $strPathToScite $objShortcut.Save ; Umgebungsvariablen und deren Speicherorte ; Die Eigenschaft Environment des Objekts WshShell gibt die Collection WshEnvironment zurück, ; über die das Script Umgebungsvariablen abfragen, einrichten und verändern kann. #cs User Spezifisch für den angemeldeten Benutzer. HKCU\Environment Werden zwischen Ab- und Anmeldung des Benutzers gespeichert. System Gelten für alle Benutzer des Computers HKLM\System\CurrentControlSet\ und werden zwischen An- und Control\Session Manager\Environment Abmeldung gespeichert. Volatile Gelten nur für die aktuelle Sitzung. HKCU\VolatileEnvironment Werden nicht gespeichert. Process Gelten nur für den aktuellen Prozess. Werden nicht in der Registrierung gespeichert. #ce ; Abfragen von Umgebungsvariablen ; Um eine Collection mit den Umgebungsvariablen eines bestimmten Typs zu erhalten, ; verwenden Sie die Eigenschaft WshShell.Environment. Ihr übergeben Sie eine String, ; der den gewünschten Variablentyp enthält: system, user, process oder volatile. ; Danach kann das Script über die Collection WshEnvironment über den Namen der ; Umgebungsvariablen auf diese zugreifen. #cs Name System User Process Process (nur Windows 98/Me) NUMBER_OF_PROCESSORS x x PROCESSOR_ARCHITECTURE x x PROCESSOR_IDENTIFIER x x PROCESSOR_LEVEL x x PROCESSOR_REVISION x x OS x x COMSPEC x x x HOMEDRIVE x HOMEPATH x PATH x x x x PATHEXT x x PROMPT x x SYSTEMDRIVE x SYSTEMROOT x WINDIR x x x TEMP x x x TMP x x x #ce ; Benutzerspezifische und die Computerspezifische Umgebungsvariable PATH auslesen $objShell = ObjCreate("WScript.Shell") $colSystemEnvVars = $objShell.Environment("System") $colUserEnvVars = $objShell.Environment("User") $str = _ "Computer-specific PATH Environment Variable:" & @LF & _ $colSystemEnvVars("PATH") & @LF & _ "User-specific PATH Environment Variable:" & @LF & _ $colUserEnvVars("PATH") MsgBox(0, 'Path - Variablen', $str) ; Umgebungsvariablen erstellen ; Eine Umgebungsvariable mit dem Namen 'MeineVariable' mit den Anfangswert 0 $objShell = ObjCreate("WScript.Shell") $colUserEnvVars = $objShell.Environment("User") $colUsrEnvVars("MeineVariable") = 0 ; Variablen vom Typ 'user' und 'system' werden bei der Abmeldung des Benutzers gespeichert. ; Es wird eine Umgebungsvariable vom Typ user mit dem Namen APP_VARIABLE erstellt und ; deren Wert auf Installiert gesetzt. Danach fragt das Script den Wert der neu erstellen ; Variable ab, um sicherzustellen, dass diese auch erstellt wurde. $objShell = ObjCreate("WScript.Shell") $colUsrEnvVars = $objShell.Environment("USER") $colUsrEnvVars("APP_VARIABLE") = "Installiert" MsgBox(0, 'Wert von APP_VARIABLE', $colUsrEnvVars("APP_VARIABLE")) ; Änderung einer Umgebungsvariable von Typ user $objShell = ObjCreate("WScript.Shell") $colUsrEnvVars = $objShell.Environment("USER") $strCurrentValue = $colUsrEnvVars("APP_VARIABLE") $colUsrEnvVars("APP_VARIABLE") = "Aktualisiert" MsgBox(0, 'Geänderter Wert von APP_VARIABLE', $colUsrEnvVars("APP_VARIABLE")) ; Auswerten von Umgebungsvariablen ; Über Umgebungsvariablen können Sie Systeminformationen abrufen. Wenn Sie zum Beispiel auf ; den temporären Ordner des Benutzers zugreifen möchten, dann brauchen Sie die Pfadangabe für ; diesen Ordner (beispielsweise C:\Temp). ; Um den Wert einer Umgebungsvariable abzufragen, verwenden Sie die ; Methode WshShell.ExpandEnvironmentStrings. ; Diese Methode erwartet als Parameter den in Prozentzeichen (%) eingeschlossenen Namen ; der Umgebungsvariable als String und gibt deren Wert zurück. ; Den Wert einer Umgebungsvariable und dann die ausgewertete Umgebungsvariable auslesen. $objShell = ObjCreate("WScript.Shell") $colEnvVars = $objShell.Environment("User") $str = _ "Temporärer Ordner:" & @LF & _ $colEnvVars("TEMP") & @LF & _ "Temporärer Ordner (ausgewertet) " & @LF & _ $objShell.ExpandEnvironmentStrings("%TEMP%") MsgBox(0, 'TEMP', $str) ; Einträge im Ereignisprotokoll erzeugen ; Das WshShell-Objekt stellt hierzu die Methode LogEvent zur Verfügung. ; Sie erzeugt einen Eintrag im Anwendungsprotokoll. ; Bearbeitung und Auswertung des Protokolls sind hiermit nicht möglich. ; LogEvent erwartet zwei Parameter. ; Der erste Parameter ist ein Integerwert, der das Ereignis definiert, ; der zweite Parameter gibt den Text für den Protokolleintrag an. ; Optional als dritten Parameter: der Computername (wird unter Win95/98 ignoriert) #cs Wert Ereignistyp 0 Erfolgreich 1 Fehler 2 Warnung 4 Information 8 Erfolgsüberwachung 16 Fehlerüberwachung #ce ; Test Ereignisprotokoll $objShell = ObjCreate("WScript.Shell") With $objShell .LogEvent(0,"Test Erfolgreich") .LogEvent(1,"Test Fehler") .LogEvent(2,"Test Warnung ") .LogEvent(4, "Test Information ") .LogEvent(8, "Test Erfolgsüberwachung ") .LogEvent(16, "Test Fehlerüberwachung ") EndWith ; Schreiben und Lesen in der lokalen Registry ; Registrierungseinträge lesen ; Methode RegRead ; Die Betriebssystemversion auslesen $objShell = ObjCreate("WScript.Shell") $sngVersion = $objShell.RegRead _ ("HKLM\Software\Microsoft\Windows NT\CurrentVersion\CurrentVersion") MsgBox(0, 'Betriebssystemversion', $sngVersion) ; Registry-Datentypen #cs REG_SZ String REG_DWORD Number REG_BINARY Binary Value REG_EXPAND_SZ Expandable String REG_MULTI_SZ Array of Strings #ce ; Wenn versucht wird mit RegRead nicht unterstützte Datentypen auszulesen, ; führt dies zu einem Fehler. ; Registrierungswert vom Datentyp Multistring (REG_MULTI_SZ) auslesen. ; Die Informationen werden als String-Array zurückgegeben, ; der in einer For-Each-Schleife ausgegeben wird. $objShell = ObjCreate("WScript.Shell") $arrValues = $objShell.RegRead _ ("HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security\Sources") $str = '' For $strValue In $arrValues $str &= $strValue & @LF Next MsgBox(0, 'Multistring', $str) ; Registrierungseinträge erstellen oder ändern ; Methode: RegWrite ; Anmerkung: Der Datentyp REG_MULTI_SZ wird von der Methode RegWrite nicht unterstützt. ; Einen DWORD-Eintrag erstellen $objShell = ObjCreate("WScript.Shell") $objShell.RegWrite("HKCU\TestKey\Version", 56, "REG_DWORD") ; Registrierungseinträge löschen ; Methode RegDelete ; Löschen eines DWORD-Eintrags aus der Registrierung $objShell = ObjCreate("WScript.Shell") $objShell.RegDelete("HKCU\TestKey\Version") ; Tastatureingaben an ein Programm schicken ; Methode: SendKeys (Zeichen als Parameter) ; Zeichenkombinationen für Sondertasten mit SendKeys #cs Taste Wert für SendKeys Rückschritt {BACKSPACE}, {BS}, oder {BKSP} Pause {BREAK} Feststelltaste {CAPSLOCK} Entf. oder Entfernen {DELETE} oder {DEL} Pfeil runter {DOWN} Ende {END} Eingabe {ENTER} oder ~ ESC {ESC} Hilfe {HELP} Pos1 {HOME} Einf. oder Einfügen {INSERT} oder {INS} Pfeil Links {LEFT} NUM {NUMLOCK} Bild runter {PGDN} Bild hoch {PGUP} Druck {PRTSC} Pfeil links {RIGHT} Rollen {SCROLLLOCK} Tabulator {TAB} Pfeil hoch {UP} Hochstelltaste + Steuerung (Strg) ^ Alt % #ce ; Alle Funktionstasten werden über den Tastennamen in geschweiften Klammern ; angegeben - zum Beispiel {F1} für die Taste F1 usw. ; Editor öffnen, warten bis aktiv, dann Text senden $objShell = ObjCreate("WScript.Shell") With $objShell .Run("Notepad.exe") Do $Success = $objShell.AppActivate("Editor") Sleep(500) Until $Success .SendKeys("Dies ist ein Test.") EndWith ; Mit AppActivate wird der übergebene String mit allen Fenstertiteln verglichen. ; Wenn keine Übereinstimmung gefunden wird, setzt AppActivate den Focus auf das Fenster, ; dessen Titel mit dem übergebenen String beginnt. Wenn auch hier keine Übereinstimmung ; gefunden werden kann, wird der Focus auf das Fenster gesetzt, dessen Titel mit dem String endet. ; So wird sichergestellt, dass AppActivate auch mit Anwendungen funktioniert, in denen Dokumente ; geöffnet werden können (wenn Sie zum Beispiel Notepad starten und ein neue Dokument öffnen, dann ; lautet der Fenstertitel von Notepad 'Unbenannt -Editor' und nicht 'Editor'. ; Nachrichtenfenster anzeigen ; Methode: Popup ; .Popup(Text [,Timeout [,Titel [,Schalter]]]) $objShell = ObjCreate("WScript.Shell") With $objShell .Popup("Festplattenprüfung durchgeführt") .Popup("Speicherprüfung durchgeführt") .Popup("CPU-Prüfung durchgeführt") EndWith ; Symbole und Schalter in Nachrichtenfenstern ; Sie haben die Möglichkeit, unterschiedliche Schalter und Symbole im Nachrichtenfenster anzeigen ; zu lassen (zum Beispiel die Schalter Ja und Nein oder die Schalter Abbrechen, Wiederholen, Ignorieren). ; Die Angezeigten Schalter und Symbole definieren Sie mit dem vierten Parameter der Methode Popup. ; Er setzt sich auch einer Kombination von vordefinierten Konstanten zusammen - die beiden Werte werden einfach addiert. #cs Symbol Wert Stop 16 Fragezeichen 32 Ausrufungszeichen 48 Information 64 Schalter Wert OK 0 OK und Abbrechen 1 Abbrechen, Wiederholen und Ignorieren 2 Ja, Nein und Abbrechen 3 Ja und Nein 4 Wiederholen und Abbrechen 5 Konstanten für den Standardschalter Standardschalter Wert Linker Schalter 0 Mittlerer Schalter 256 Rechter Schalter 512 Rückgabewerte der Tasten Wert Schalter 1 OK 2 Abbrechen (bei OK, Abbrechen) 3 Abbrechen (bei Wiederholen, Abbrechen, Ignorieren) 4 Wiederholen 5 Ignorieren 6 Ja 7 Nein #ce ; Kombinationen von Symbolen und Schaltern anzeigen Const $TIMEOUT = 5 Const $POPUP_TITLE = "Symbole und Schalter " $objShell = ObjCreate("WScript.Shell") With $objShell .Popup("Stop / Abbrechen(Focus), Wiederholen und Ignorieren ", _ $TIMEOUT,$POPUP_TITLE,16+2) .Popup("Fragezeichen/ Ja, Nein und Abbrechen(Focus)", _ $TIMEOUT,$POPUP_TITLE,32+3+512) .Popup("Ausrufungszeichen / Ja und Nein(Focus) ", _ $TIMEOUT,$POPUP_TITLE,48+4+256) .Popup("Information / Wiederholen und Abbrechen(Focus) ", _ $TIMEOUT,$POPUP_TITLE,64+5+256) EndWith