Javascript 如何将VBScript字符串传递为HTML输入框中的默认值?

Javascript 如何将VBScript字符串传递为HTML输入框中的默认值?,javascript,html,css,vbscript,Javascript,Html,Css,Vbscript,我正在使用HTML和VB制作一个HTA向导 这是我收到的一些VB代码。我需要取SN2在这里设置的值,并使它在我的html代码中显示为默认文本作为计算机名 我不知道如何调用VB代码来显示在向导的计算机名文本框中。这可能吗 VB代码 strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "

我正在使用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 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
然后我尝试在HTML代码中通过设置value=SN2来调用它,使用上述两种方法。但很明显,这只会使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中工作


因此,机器名称会出现在弹出窗口中,现在正在运行。从这里开始,我想让机器名显示在my.hta的HTML输入框中,就像我最初打算的那样,而不是现在的弹出窗口。

您需要将代码连接到DOM事件。您需要将
SN2
更改为返回计算机名的
函数(而不是
Sub
),然后在
窗口中调用它。加载
事件(或全部内联执行)

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

IE VBScript中还有其他绑定事件处理程序的方法,但没有一种很好。这里记录了这一点:

无论如何,您将需要以下内容:

<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>

选项显式
子窗口加载
Dim计算机名称TR、wmiService、biosRow、biosRow、serialNumber
computerNameStr=“”
设置wmiService=GetObject(“winmgmts:{impersonationLevel=impersonate}!\\”&computerNameStr&“\root\cimv2”)
Set biosRows=objWMIService.ExecQuery(“从Win32_BIOS中选择*)
对于biosRows中的每个biosRow
serialNumber=biosRow.serialNumber
如果Len(serialNumber)>0,则
window.computerName.value=serialNumber
退出
如果结束
下一个
端接头

HTA在Windows PE上运行的事实与此无关,IE的CSS支持仍将存在,尽管如果您使用VBScript,IE必须在IE7仿真模式下运行,该模式将禁用较新的功能。此应用程序不是在IE中运行的,它是一个独立的预操作系统。我不参与。现在也不确定这是否重要。如果它作为HTA运行,那么它在HTA主机进程中运行的IE实例中运行。@JessLovejoy您不需要自己调用
Window\u onload
,而是使用VBScript的自动事件连接功能,这在我发布的链接中有记录。您可以忽略我关于将
SN2
更改为函数的评论,因为我的示例排除了这一建议。好的,我将阅读该链接,我必须在系统上测试这一点以确保其工作:)@JessLovejoy您可以使用虚拟机来减少所需的测试工作。我个人推荐Oracle VirtualPC——虽然Hyper-V也可以。我已经有了一台测试机,它是预引导环境,所以根本不涉及IE。不过谢谢你。因此,我能够按照建议进行测试,但它不起作用。这可能与此无关,但我是否对子窗口_onload造成了问题?@Jess是的,现有事件句柄
onload
会导致问题。将对
preload options
的调用移动到
窗口中的onload
子代码中。