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

Vbscript HTA和VBS动态列表和在列表中打开文件,vbscript,hta,Vbscript,Hta,首先,这里是新的和一般的编程。我正在尝试构建一个hta,可以从外部文件夹加载各种vbs脚本,使其更加模块化。我现在在尝试从动态列表中打开vbs时遇到了麻烦。如何打开动态列表中的文件?以及如何将变量传递到文件?这就是我目前拥有的: <html> <head> <title>My HTML application</title> <HTA:APPLICATION APPLICATIONNAME="My HTML application" ID="

首先,这里是新的和一般的编程。我正在尝试构建一个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>

我的HTML应用程序
子窗口加载
暗折叠路径
'要搜索文件的文件夹
Dim objFSO
Dim objFolder
暗色文件
Dim objFile
模糊观察
FolderPath=“%PathToScript%”
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
设置objFolder=objFSO.GetFolder(FolderPath)
设置colFiles=objFolder.Files
对于colFiles中的每个objFile
Set objOption=Document.createElement(“选项”)
objOption.Text=objFile.Name
objOption.Value=objFile.Name
mylistbox.Add(对象选项)
下一个
端接头
子运行程序
设置objShell=CreateObject(“Wscript.Shell”)
objShell,运行objOption
端接头
问题1:如何打开动态列表中的文件?

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

strFile = mylistbox.Value
由于可能未选择任何内容,因此最好测试结果,以确保您获得了某些内容:

If Len(strFile) > 0 Then
另外,看起来您只是在列表中显示文件名,而不是文件路径,这很好,但是如果您想稍后运行该文件,则需要完整的文件路径。所以你有两个选择,这里<代码>选项1:将
FolderPath
设置为全局常量而不是局部变量,以便您可以从
RunProgram()
例程访问它<代码>选项2:利用
元素的
属性来存储每个列表项的完整路径,同时仍然只显示文件名。下面是如何实现后者:

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”版本)显式运行脚本文件。我们用双引号将文件括起来,如上所述。最后,我们添加了一个空格来分隔“命令”和参数。为了完整性,我们还在参数周围添加双引号,以防它也包含空格