我正在使用 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 输入框中,就像我最初打算的那样,而不是像现在这样弹出。
最佳答案
您需要将代码连接到 DOM 事件。您需要将 SN2
更改为返回计算机名称的 Function
(而不是 Sub
),然后在 window.load
事件(或全部内联)
VBScript 没有内在或内在的事件概念(从技术上讲,Javascript 也没有),因此平台设计者决定使用“神奇”的命名约定来处理事件,这很笨重。它在名称中使用下划线将函数/子程序绑定(bind)到 DOM 对象事件,就像 VB6 将 Button1_Click
绑定(bind)到 Button1
的 Click
事件一样>.
在 IE VBScript 中还有其他绑定(bind)事件处理程序的方法,但没有一种很漂亮。这记录在这里: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>
关于javascript - 如何将 VBScript 字符串传递为我的 HTML 输入框中的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28863121/