如何从 Vbscript 调用的 HTA 获取变量

2024-01-18

UPDATE:我找到了第一个问题的答案。其实我用了两种方法。对于“strBoxTitle”变量,我替换了该行:

<b>strBoxTitle</b><p>

有了这个

<b>
<script>document.write( strBoxTitle )</script>
</b><p>

它正确显示了变量的值,而不是它的名称。然而,这对于“strLocalUser”变量不起作用,因为它位于输入标记内。对于那个,我添加了这一行

document.getElementById("userid").value = strLocalUser

到我的窗口 OnLoad 函数,并将输入标记从

<input id='userid' size=20 class='fixed' value=strLocalUser>

to just

<input id='userid' size=20 class='fixed'>

这也有效,用“strLocalUser”的值填充用户输入字段,更不用说防止我需要在输入标签内嵌套脚本标签,这显然是不允许的。

原问题:

我正在尝试编写一个 HTA 文件,该文件从 Vbscript 文件调用以获取用户输入。使用以下命令调用 HTA 文件

objWShell.Run ".\UserInput.hta | " & "Please Enter Your Credentials" & _
    " | " & strLoginID,1,True

我在 Stack Overflow 中编写的 HTA 文件“UserInput.hta”是

<!DOCTYPE html>
<html>
<head>
    <hta:application
        id = oHTA
        border = dialog
        innerborder = no
        caption = yes
        sysmenu = no
        maximizebutton = no
        minimizebutton = no
        scroll = no
        singleinstance = no
        showintaskbar = no
        contextmenu = no
        selection = yes
    />
    <style type='text/css'>
        .fixed { font-family:courier new, monospace }
    </style>
</head>
<script language="VBScript">
    CmdLine = oHTA.commandLine
    Params = Split(CmdLine,"|")
    strBoxTitle = Params( 1 )
    strLocalUser = Params( 2 )

    Sub window_OnLoad
        Document.Title = strBoxTitle
        Window.ResizeTo 400, 200 + 70
        Window.MoveTo Window.screen.width / 2 - 200, Window.screen.height / 2 - 200
    End Sub

    Function SubmitBtn()
        Window.Close
    End Function

</script>
<body bgcolor=Silver>
    <center><form>
        <b>strBoxTitle</b><p>
        <table>
        <tr><td colspan=2 align=left>
        Please enter your username and password:<br><br>
        </td></tr><tr><td valign=top>
        Username:&nbsp;
        </td><td>
        <input id='userid' size=20 class='fixed' value=strLocalUser>
        </td></tr><tr><td valign=top>
        Password:&nbsp;
        </td><td>
        <input type='password' id='passwd' size=20 class='fixed'><p>
        </td></tr>
        </table>
        <p>
        <input type='button' value='Submit' id='but0' onclick='SubmitBtn()'>
    </form></center>
</body>
</html>

这会正确显示带有两个输入字段的输入框。不幸的是,这就是我所得到的。我的两个问题是:

  1. 如何让输入框显示 strBoxTitle 和 strLocalUser 变量的值,而不是文本“strBoxTitle”和“strLocalUser”?
  2. 如何将用户输入的值从输入框用户 ID 和密码传递回调用 Vbscript?

预先感谢所有指导和建议。


这是修改后的脚本以通过注册表传回结果:

用户输入.hta

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" http-equiv="X-UA-Compatible" content="IE=9">
<hta:application
id = oHTA
border = dialog
innerborder = no
caption = yes
sysmenu = no
maximizebutton = no
minimizebutton = no
scroll = no
singleinstance = no
showintaskbar = no
contextmenu = no
selection = yes
>
<script language="VBScript">
Set oWSH = CreateObject("Wscript.Shell")
CmdLine = oHTA.commandLine
Params = Split(CmdLine,"|")
strBoxTitle = Params(1)
strLocalUser = Params(2)
CenterWindow 400,270

Sub window_OnLoad
  document.Title = strBoxTitle
  title.innerHTML = strBoxTitle
  userid.Value = strLocalUser
  passwd.focus
End Sub

Sub document_onKeyDown
  If window.event.keyCode=13 Then Submit
End Sub

Sub CenterWindow(w,h)
  Window.ResizeTo w,h
  Window.MoveTo (screen.availWidth - w)/2, (screen.availHeight - h)/2
End Sub

Sub Submit
  Key = "HKCU\Software\UserInputHTA\"
  oWSH.RegWrite Key & "UserName",userid.value
  oWSH.RegWrite Key & "Password",passwd.value
  Window.Close
End Sub
</script>

<style>
.fixed { font-family:courier new, monospace }
</style>
</head>
<body bgcolor=Silver>
<center>
<b><span id=title></span></b><br><br>
Please enter your username and password:<br><br>
<table>
<tr>
<td>Username:</td>
<td><input type=text id=userid size=20 class=fixed></td>
</tr>
<tr>
<td>Password:</td>
<td><input type=password id=passwd size=20 class=fixed></td>
</tr>
</table>
<br><br>
<input type=button value=Submit id=but0 onclick=Submit()>
</center>
</body>
</html>

测试用户输入.vbs

strLoginID = "SomeUser"
strPassword = ""
Set oWSH = CreateObject("Wscript.Shell")
oWSH.Run ".\UserInput.hta " & "|Please Enter Your Credentials|" & strLoginID,1,True
Key = "HKCU\Software\UserInputHTA\"
On Error Resume Next
strLoginID = oWSH.RegRead(Key & "UserName")
strPassword = oWSH.RegRead(Key & "Password")
oWSH.RegDelete Key
On Error Goto 0
MsgBox strLoginID & vbCRLF & strPassword

其他变化:1)添加了meta行将文档模式设置为 IE=9(仅!DOCTYPE设置 HTA 通常会处于 IE=7 模式),2)添加CenterWindow使用任务栏的功能availWidth and availHeight, 3) 将焦点设置在密码字段上,以便用户可以立即开始输入,4) 添加了对按下的检查Enter所以用户不必使用鼠标,5)消除了form标签在这种情况下是不必要的,并且会干扰通过 id 直接引用元素的能力,例如passwd.value, 6) 修复了以下问题userid通过前导空格传递,7) 使用span标题文本(只是为了展示另一种方法)。

其他建议:删除多余的请求。正如所写,该接口有Please Enter Your Credentials, 其次是Please Enter Your Credentials, 其次是Please enter your username and password.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Vbscript 调用的 HTA 获取变量 的相关文章

  • 经典 ASP 中的超时问题

    我正在开发一个经典的 ASP 项目 在从数据库填充数据并将其绑定到 UI 中时遇到超时问题 我们得到以下错误 脚本超时 超出了脚本执行的最长时间 您可以通过为 Server Scripttimeout 属性指定新值或更改 IIS 作为管理工
  • VBScript/IIS - 如何为特定网站自动设置 ASP.NET 版本

    我需要编写在 IIS 6 0 上创建应用程序池和网站的脚本 我已经能够使用 adsutil vbs 和 iisweb vbs 创建这些 但不知道如何将我刚刚创建的网站的 ASP NET 版本设置为 2 0 50727 0 理想情况下 我想使
  • VBScript 宏 getParentFolder 名称

    我正在尝试创建一个 vbscript 宏 它将获取存储宏的文件夹位置并将输出文件创建到同一文件夹中 我正在使用下面的代码 但它没有获得正确的位置 Set obj1FSO CreateObject Scripting FileSystemOb
  • 从ini文件中读取数据

    我有一个需要输入文件名的 vbscript 代码是 Dim tsout Set tsout gofs CreateTextFile C csv Dim tsin Set tsin gofs OpenTextFile C csv 我该如何配置
  • 如何从 vbs 脚本发送电子邮件

    如何从 vbs 脚本发送电子邮件 在无法连接到互联网的计算机上 位于我的非互联网区域 我通过谷歌搜索将以下内容整合在一起 但似乎需要调用微软的服务器 如果我无法访问 microsoft com 该怎么办 sch http schemas m
  • VBS 脚本查找特定扩展名的所有文件并将它们复制到特定目的地

    我正在制作一个项目 通过创建一个脚本来在工作中使用来自动化我们的一个流程 我希望脚本检查用户名的输入 以搜索指定的用户配置文件路径中的任何 doc docx pdf pst 等文件 并将它们按原样复制到网络驱动器位置上创建的文件夹中 我的主
  • VBSCRIPT 将文件上传到服务器

    我正在尝试制作一个脚本来将任何文件上传到简单的 html php 上传表单 我找不到任何不使用 ASP 的工作脚本 这是我最接近的代码 VBS Dim strURL Dim HTTP Dim dataFile Dim dataRequest
  • ADO 参数化查询不返回任何结果

    我正在使用此查询从经典 asp 页面中的 vbscript 获取一些结果 但它不会返回任何值 该页面是空白的 也没有错误 请问有什么建议吗 dim cmd admin no admin no request QueryString admi
  • VBScript 条件短路解决方法

    我有一个必须维护的大型经典 ASP 应用程序 并且我多次发现自己因缺乏短路评估能力而受挫 例如 VBScript 不会让你逃脱 if not isNull Rs myField and Rs myField lt gt 0 then 因为如
  • 暗淡和公共有什么区别?

    今天提出了一个关于范围的问题 这引起了我的思考 我一直了解 VBScript 范围以及如何声明全局和本地 我突然想到我从来没有使用过Public变量但倾向于使用Dim相反 在全局声明时 据我了解Dim是相同的Public 但如果是这样的话
  • ASP中,位运算符左移和右移

    有谁知道左移和右移运算符示例吗 我是 ASP 新手 我发现了位运算符 例如 AND OR NOT 等等 对于 vbscript 左移是通过乘法完成的 即 var 2 左移一个位置 var 4 左移两个位置等 右移是通过除法完成 即 var
  • SetTimeout() 不会执行该函数

    这是我的代码片段 in VBScript Sub Main Dim timeoutTimer more scripts here more scripts here more scripts here timeoutTimer window
  • 我可以直接从命令行运行 vbscript 命令(即没有 vbs 文件)吗?

    在Python中你没有义务使用文件 你可以指定 c 并通过命令行上的字符串将 Python 命令提供给 Python 解释器 我可以用 vbscript 达到相同的结果吗 我见过需要您使用批处理脚本的解决方案 但是如果我所在的系统具有零写入
  • 如何将 VBScript 转换为可执行 (EXE) 文件? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我四处寻找转换 VBScript 的信息 vbs 到可执行文件 并意识到大多数可用的工具实际上是将脚本包装在可执行文件中 尝试了一些工
  • 什么时候必须将 XPath 属性设置为 XML DOM 对象?

    例如 Set objXML CreateObject Microsoft XMLDOM objXML async False objXML validateOnParse False objXML resolveExternals Fals
  • 从命令行使用 VBScript 从 Excel 外部运行 Excel 宏

    我正在尝试从 Excel 文件外部运行 Excel 宏 我目前正在使用从命令行运行的 vbs 文件 但它一直告诉我找不到宏 这是我尝试使用的脚本 Set objExcel CreateObject Excel Application Set
  • 使用参数将变量从 vbscript 传递到批处理文件

    请问如何将 inp 变量从这段 vb 传递到我的名为 job bat 的批处理 确实 在从 job bat 进行回显 echo 2 时 我注意到 inp 未正确传递 提示命令视图 inp而不是从 vbs 检索到的值 谢谢 For Each
  • 为什么 vbscript Mid 函数显示错误“无效的过程调用或参数:Mid”

    您好 下面是我的 ASPClassic 代码 其中 csvData 是一个包含变量的非常大的字符串 现在在 Mid 函数调用的这一行中出现错误 无效的过程调用或参数 Mid 为什么会发生这种情况 Dim dataLen Dim fromLe
  • 如何使用服务器端vbscript获取图像宽度? ASP经典

    几天来我一直在尝试找到一种方法来获取驻留在我们服务器上的 png 文件的图像宽度 我正在尝试读取文件的前 24 个字节并解析出字节 17 20 的宽度 我在网上找到了几种例程 但都没有成功 奇怪的是 我似乎得到了从十六进制解码到十进制的字节
  • 从 VBS 运行同一目录中的批处理文件

    我有一个 VBScript 应该运行 bat 或 vbs 文件 但它不起作用 它出现一个错误 指出无法找到该文件 无论我是否放入文件路径 我认为这并不重要 因为它位于同一目录中 所以我的问题是 如何从 VBScript 中启动 bat 文件

随机推荐