Skripten in VBScript fehlt eine Möglichkeit, Kennwörter mit einem verdeckten Eingabefeld einzutippen. Eine halbwegs elegante Methode bietet sich per HTML, denn dort gibt es einen speziellen Typ des Steuerelements “INPUT”, das verdeckte Eingaben ermöglicht. Nun eignet sich aber längst nicht jedes Skript dazu, in eine HTML-Seite eingebettet zu werden, denn der im Internet Explorer enthaltene Skript-Host kennt einige Funktionen des WSH nicht. Mit anderen Browsern geht es gleich gar nicht.
Das folgende Skript stellt eine Funktion zur verdeckten Kennworteingabe vor, die den Browser direkt aus dem Skript fernsteuert und damit ein Dialogfeld erzeugt. Nachteil dieser Methode: Ab Internet Explorer 7 gibt es keine sinnvolle Möglichkeit, einen solchen Dialog in den Vordergrund zu holen, denn die Sicherheitseinstellungen des Browsers lassen das nicht zu. Es kann also sein, dass der Benutzer den Dialog erst per Alt-Tab nach vorn holen muss.
strKennwort = GetPassword("Bitte Kennwort eingeben")
‚ strKennwort enthält jetzt das Kennwort oder bei Abbruch einen Leerwert
If strKennwort <> "" Then
WScript.Echo "Kennwort: " & strKennwort
Else
WScript.Echo "Kein Kennwort angegeben."
End If
Function GetPassword(strWindowTitle)
Set objIE = WScript.CreateObject("InternetExplorer.Application", "IE_")
objIE.Navigate "about:blank"
objIE.ToolBar = 0
objIE.StatusBar = 0
objIE.Width = 400
objIE.Height = 150
objIE.Left = 300
objIE.Top = 200
objIE.Visible = 1
objIE.Document.Write "<HTML>"
objIE.Document.Write "<TITLE>" & strWindowTitle & "</TITLE>"
objIE.Document.Write "<SCRIPT LANGUAGE=""VBScript"">" & vbNewLine
objIE.Document.Write "Sub RunScript" & vbNewLine
objIE.Document.Write " OKClicked.Value = ""OK""" & vbNewLine
objIE.Document.Write "End Sub" & vbNewLine
objIE.Document.Write "Sub CancelScript" & vbNewLine
objIE.Document.Write " OKClicked.Value = ""Cancelled""" & vbNewLine
objIE.Document.Write "End Sub" & vbNewLine
objIE.Document.Write "</SCRIPT>" & vbNewLine
objIE.Document.Write "<BODY><P>" & strWindowTitle & "</P>"
objIE.Document.Write "<P>Kennwort: "
objIE.Document.Write "<input type=""password"" name=""UserPassword"" size=""40"">"
objIE.Document.Write "<input type=""hidden"" name=""OKClicked"">"
objIE.Document.Write "<input id=""runbutton"" Class=""button"" type=""button"" value="" OK """
objIE.Document.Write "name=""ok_button"" onClick=""RunScript"">"
objIE.Document.Write "<input id=""runbutton"" Class=""button"" type=""button"" value=""Abbrechen"""
objIE.Document.Write "name=""cancel_button"" onClick=""CancelScript"">"
objIE.Document.Write "</P>"
objIE.Document.Write "</BODY>"
objIE.Document.Write "</HTML>"
Do While (objIE.Document.Body.All.OKClicked.Value = "")
WScript.Sleep 250
Loop
strPassword = objIE.Document.Body.All.UserPassword.Value
strButton = objIE.Document.Body.All.OKClicked.Value
objIE.Quit
WScript.Sleep 250
If strButton = "Cancelled" Then
GetPassword = ""
Else
GetPassword = strPassword
End If
End Function
Weiterer Nachteil: Man darf den Dialog nur über die Buttons “OK” oder “Cancel” beenden, nicht über das “Schließen-X” am rechten oberen Rand. Aber immerhin besser als nix. 😉
http://faq-o-matic.net/?p=2464