HTA 和 VBS 动态列表和在列表中打开文件



首先是这里的新东西,一般的编程。我正在尝试构建一个 hta,它可以从外部文件夹加载各种 vbs 脚本,以使其更加模块化。我目前正试图从我的动态列表中打开 vbs。如何在动态列表中打开文件?还有如何将变量传递给文件? 这是我目前拥有的:

<html>
<head>
<title>My HTML application</title>
<HTA:APPLICATION
APPLICATIONNAME="My HTML application"
ID="MyHTMLapplication"
VERSION="1.0"/>
</head>
<script language="VBScript">
Sub Window_OnLoad
Dim FolderPath 
'folder to be searched for files 
Dim objFSO 
Dim objFolder 
Dim colFiles 
Dim objFile
Dim objOption
FolderPath = "%PathToScripts%"
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder(FolderPath)
Set colFiles = objFolder.Files
For Each objFile in colFiles
Set objOption = Document.createElement("OPTION")
    objOption.Text = objFile.Name
    objOption.Value = objFile.Name
    mylistbox.Add(objOption)
Next
End Sub
Sub RunProgram 
    Set objShell = CreateObject("Wscript.Shell")
    objShell.Run objOption
End Sub

</script>
<body bgcolor="white">
<!--Add your controls here-->
<select name="mylistbox" size=10>
</select>
<input type="button" value="SingleSelect" onclick="RunProgram" name="RunScript">

<!--{{InsertControlsHere}}-Do not remove this line-->
</body>
</html>

问题 1:如何在动态列表中打开文件?

首先,您需要从列表中检索所选值。对于单选列表,只需查询 <select> 元素的 Value 属性:

strFile = mylistbox.Value

由于可能没有选择任何内容,因此测试结果以确保您得到某些内容总是一个好主意:

If Len(strFile) > 0 Then

此外,看起来您只是在列表中显示文件名,而不是文件路径,这很好,但是如果您想稍后运行该文件,则需要完整的文件路径。所以你有几个选择,在这里。 Option 1: FolderPath 设为全局常量而不是局部变量,以便您可以从RunProgram()例程访问它。 Option 2: 利用 <option> 元素的 Value 属性来存储每个列表项的完整路径,同时仍仅显示文件名。以下是执行后者的方法:

Set objOption = Document.createElement("OPTION")
    objOption.Text = objFile.Name
    objOption.Value = objFile.Path    ' Changed from objFile.Name to objFile.Path
    mylistbox.Add(objOption)
Next

现在您已经拥有脚本的完整路径,可以运行它了。这是您的RunProgram()例程的样子:

Sub RunProgram()
    ' Get the selected value. This will be a full file path.
    strFile = mylistbox.Value
    ' Make sure something was selected.
    If Len(strFile) > 0 Then
        ' Run the script file.
        Set objShell = CreateObject("WScript.Shell")
        objShell.Run Chr(34) & strFile & Chr(34)
    End If
End Sub

注意:Chr(34)用于在文件名周围添加双引号,以防文件名包含空格。

问题 2:如何将变量传递给文件?

这就是事情变得有点棘手的地方。虽然您可以使用 Shell.Run 命令直接运行 VBScript(如上所述(,但如果要将参数传递给脚本,则需要使用脚本引擎可执行文件之一显式运行它。

objShell.Run "wscript.exe " & Chr(34) & strFile & Chr(34) & " " & Chr(34) & strParam & Chr(34)

在这里,我们使用wscript.exe(Windows 脚本主机的"GUI"版本(来显式运行我们的脚本文件。我们用双引号包围我们的文件,就像我们上面所做的那样。最后,我们添加一个空格来分隔"命令"和参数。为了完整起见,我们还在参数周围添加了双引号,以防它也包含空格。

相关内容

  • 没有找到相关文章

最新更新