将表单输入值从HTA返回到打开它的VBS脚本

时间:2015-04-30 10:01:06

标签: vbscript hta

我有一个映射驱动器的VBS脚本。根据用户的不同,可以映射通用文件夹(不需要凭据)或个人文件夹(需要用户名和密码)。我目前正在使用标准的WSH输入,这显然不太安全,因为密码是非屏蔽的

我已经使用ScriptPW.dll查找了解决方案,但这不再是Windows原生的(我使用的是Windows 7)并且从XP复制并注册后无法正常工作

我现在看到的一个解决方案是使用HTA来提示用户名/密码。我需要时才能运行该文件,但我不确定如何(或者甚至可以)将表单中的输入值返回到父脚本。

这可能吗?

注意 - 由于表格在所有情况下都不是必需的,我不能将整个脚本放在HTA中。

以下是我如何调用HTA -

Dim Shell
Set Shell = Wscript.CreateObject("Wscript.Shell")
Shell.Run("test.hta"), 1, True
Set Shell = Nothing

这是HTA -

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
    <title>Login Application</title>
    <hta :application
        applicationname="LoginBox"  
        border="dialog"
        borderstyle="normal"
        caption="My HTML Application"
        contextmenu="no"
        maximizebutton="no"
        minimizebutton="yes"
        navigable="no"
        selection="no"
        showintaskbar="yes"
        singleinstance="yes"
        sysmenu="yes"
        version="1.0"
        windowstate="normal" />

</head>
<body>
    <form id="LoginForm">
        Enter Username: <input type="textbox" id="UserName"/><br />
        Enter Password: <input type="password" id="Password"/><br />
        <input type="submit" value="Open my scans"/>
    </form>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

我认为此功能 PasswordBox 可以帮助您,只需试一试;)

' Just an example of how to use the function
 '
 wsh.echo "You entered: ", _
          Join(PasswordBox("Enter UID and password", _
               "Testing"), ", ")

 ' A function to present a Password dialog in a VBS (WSF) 
 ' script
 ' Requires WScript version 5.1+
 ' Tom Lavedas <tlavedas@hotmail.com>
 ' with help from and thanks to Joe Ernest and 
 ' Michael Harris
 '
 ' modified 1/2008 to handle IE7
 '
 Function PasswordBox(sPrompt,sDefault)
   set oIE = CreateObject("InternetExplorer.Application")
   With oIE
 ' Configure the IE window
     .RegisterAsDropTarget = False
     .statusbar = false : .toolbar    = false
     .menubar   = false : .addressbar = false
     .Resizable = False 
     .Navigate "about:blank"
     Do Until .ReadyState = 4 : WScript.Sleep 50 : Loop
 ' Test for IE 7 - cannot remove 'chrome' in that version
     sVersion  = .document.parentWindow.navigator.appVersion  
     if instr(sVersion, "MSIE 7.0") = 0 Then .FullScreen = True 
     .width = 400       : .height = 270
 ' Create the password box document
     With .document
       oIE.left = .parentWindow.screen.width \ 2 - 200
       oIE.top  = .parentWindow.screen.height\ 2 - 100
       .open
       .write "<html><head><" & "script>bboxwait=true;</" _
            & "script><title>Password _</title></head>"_
            & "<body bgColor=silver scroll=no " _
            & "language=vbs style='border-" _ 
            & "style:outset;border-Width:3px'" _
            & " onHelp='window.event.returnvalue=false" _
            & ":window.event.cancelbubble=true'" _
            & " oncontextmenu=" _ 
            & "'window.event.returnvalue=false" _
            & ":window.event.cancelbubble=true'" _
            & " onkeydown='if ((window.event.keycode>111)"_
            & " and  (window.event.keycode<117)) or" _
            & " window.event.ctrlkey then" _
            & " window.event.keycode=0" _
            & ":window.event.cancelbubble=true" _
            & ":window.event.returnvalue=false'" _
            & " onkeypress='if window.event.keycode=13" _
            & " then bboxwait=false'><center>" _
            & "<div style='padding:10px;background-color:lightblue'>" _
            & "<b>&nbsp" & sPrompt & "<b>&nbsp</div><p>" _
            & "<table bgcolor=cornsilk cellspacing=10><tr><td>" _
            & " <b>User:</b></td><td>" _
            & "<input type=text size=10 id=user value='" _
            & sDefault & "'>" _
            & "</td><tr><td> <b>Password:</b></td><td>" _
            & "<input type=password size=12 id=pass>" _ 
            & "</td></tr></table><br>" _
            & "<button onclick='bboxwait=false;'>" _
            & "&nbsp;Okay&nbsp;" _
            & "</button> &nbsp; <button onclick=" _
            & "'document.all.user.value=""CANCELLED"";" _
            & "document.all.pass.value="""";" _
            & "bboxwait=false;'>Cancel" _
            & "</button></center></body></html>"
       .close
       Do Until .ReadyState = "complete" : WScript.Sleep 100 : Loop
       .all.user.focus
       .all.user.select ' Optional
       oIE.Visible = True
       CreateObject("Wscript.Shell")_
         .Appactivate "Password _"
       PasswordBox = Array("CANCELLED")
       On Error Resume Next
       Do While .parentWindow.bBoxWait
         if Err Then Exit Function
         WScript.Sleep 100
       Loop
       oIE.Visible = False
       PasswordBox = Array(.all.user.value, _
                           .all.pass.value)
     End With ' document
   End With   ' IE
 End Function