【问题标题】:How can I pass a VBScript string to be the default value in my HTML input box?如何将 VBScript 字符串传递为 HTML 输入框中的默认值?
【发布时间】:2015-03-19 05:08:46
【问题描述】:

我正在使用 HTML 和 VB 制作 HTA 向导。

这是给我的一些 VB 代码。我需要在此设置 SN2 的值,并使其显示为我的 html 代码中的默认文本作为计算机名称。

我不确定如何调用 VB 代码以显示在我的向导的计算机名称文本框中。这可能吗?

VB 代码

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colBIOS = objWMIService.ExecQuery _
    ("Select * from Win32_BIOS")
For each objBIOS in colBIOS
            MF=objBIOS.Manufacturer
            SN=objBIOS.SerialNumber
Next
intCharacters = 7
SN2 = RIGHT(SN, intCharacters)
            WScript.Echo SN2
            WScript.Echo MF

我尝试了上述方法,但我也尝试了所有这些,并从中制作一个 Sub,如下所示:

Sub SN2
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colBIOS = objWMIService.ExecQuery _
        ("Select * from Win32_BIOS")
    For each objBIOS in colBIOS
                MF=objBIOS.Manufacturer
                SN=objBIOS.SerialNumber
    Next
    intCharacters = 7
    SN2 = RIGHT(SN, intCharacters)
                ‘WScript.Echo SN2
                'WScript.Echo MF
End Sub

然后我尝试通过设置 value=SN2 在我的 HTML 代码中调用它,同时使用上述两种方法。但显然这只会让 HTML 文本框每次都显示“SN2”:

<table cellpadding="0" border=0 style="position:relative; left:1%">
    <tr valign=bottom style="text-align:right">
        <td class="hideextra">
            <img src="comp.png"></img>
            <b>New Computer Details</b>
        </td>
</table><br>
<table cellpadding="0" border=0>
    <tr valign=middle style="text-align:left">
        <td>
            <b>Computer Name</b><br><br>        
        </td>
        <th style="text-align:left">
            <input type=text id="ComputerName" name=ComputerName value=SN2 /><br><br>
            </select>
        </th>
</table>

我试图研究一种将值设置为脚本的 VB 部分中设置的字符串的方法,但没有提出任何建议。这可能吗?

请注意,这个 HTA 是在 Windows PE 中使用的,所以虽然我可以使用 VB,而且似乎可以使用一些 JS,但并不是所有的包都可以使用其他语言或更新版本,如 HTML5 等... *

更新!

通过将原始 VB 代码 [如上所示的第一个代码序列] 放在单独的 .vbs 文档中,代码可以完美运行并返回机器名称。我能够从 .hta 调用 .vbs,但我很好奇是什么让代码在 .vbs 文件中工作,而不是在 .hta 中工作。

所以机器名称出现在一个弹出窗口中,现在可以正常工作了。从这里开始,我想让机器名称出现在我的 .hta 中的 HTML 输入框中,就像我最初打算的那样,而不是现在的弹出窗口。

【问题讨论】:

  • HTA 在 Windows PE 上运行的事实无关紧要,IE 的 CSS 支持仍然存在,但如果您使用 VBScript,IE 必须在禁用新功能的 IE7 仿真模式下运行。
  • 此应用程序不在 IE 中运行,它是一个独立运行的预操作系统。不涉及 IE。目前也不确定这是否重要。
  • 如果它作为 HTA 运行,那么它在 HTA 主机进程中运行的 IE 实例中运行。

标签: javascript html css vbscript


【解决方案1】:

您需要将代码连接到 DOM 事件。您需要将SN2 更改为返回计算机名称的Function(而不是Sub),然后在window.load 事件中调用它(或全部内联)

VBScript 没有固有的或固有的事件概念(从技术上讲,Javascript 也没有),因此平台设计者决定使用“神奇”的命名约定来处理事件,这很笨重。它在名称中使用下划线将函数/子对象绑定到 DOM 对象事件,这与 VB6 的工作方式相同,即将 Button1_Click 绑定到 Button1Click 事件。

在 IE VBScript 中还有其他绑定事件处理程序的方法,但都不是很漂亮。这记录在这里:https://msdn.microsoft.com/en-us/library/ms533023(v=vs.85).aspx

无论如何,你会想要这个:

<html>
<head>
    <script language="VBScript">
Option Explicit
Sub Window_onload
    Dim computerNameStr, wmiService, biosRows, biosRow, serialNumber
    computerNameStr = "."

    Set wmiService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & computerNameStr & "\root\cimv2")
    Set biosRows = objWMIService.ExecQuery("SELECT * FROM Win32_BIOS")
    For Each biosRow in biosRows

        serialNumber = biosRow.SerialNumber
        If Len( serialNumber ) > 0 Then
            window.computerName.value = serialNumber
            Exit For
        End If
    Next
End Sub
    </script>
</head>
<body>
    <input type="text" id="computerName" />
</body>
</html>

【讨论】:

  • @JessLovejoy 您不需要自己致电Window_onload,而是使用VBScript 的自动事件连接功能,该功能在我发布的链接中有记录。您可以忽略我关于将 SN2 更改为函数的评论,因为我的示例排除了该建议。
  • 好的,我会阅读该链接,我必须在系统上对其进行测试以确保它有效:)
  • @JessLovejoy 您可以使用虚拟机来减少所需的测试工作量。我个人推荐 Oracle VirtualPC - 虽然 Hyper-V 也可以。
  • 我已经有一台测试机,它是一个预启动环境,所以根本不涉及IE。不过,谢谢。所以我能够按照建议进行测试,但它不起作用。这可能与它无关,但是我有 的事实是否对 Sub Window_onload 造成了问题?
  • @Jess 是的,拥有现有的事件句柄 onload 会导致问题。将对PreloadOptions 的调用移至Window_onload 子代码内。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2011-11-26
  • 2015-01-14
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 2018-10-06
相关资源
最近更新 更多