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

时间:2014-07-27 20:14:19

标签: vbscript hta

首先关注新的和一般的编程。我正在尝试构建一个可以从外部文件夹加载各种vbs脚本以使其更加模块化的hta。我目前正试图从我的动态列表中打开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 个答案:

答案 0 :(得分:0)

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

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

strFile = mylistbox.Value

由于没有可能被选中,因此测试结果以确保获得某些东西总是一个好主意:

If Len(strFile) > 0 Then

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

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(&#34; GUI&#34;版本的Windows Scripting Host)来显式运行我们的脚本文件。正如我们上面所做的那样,我们用双引号包围我们的文件。最后,我们要添加一个空格来分隔&#34;命令&#34;从参数。为了完整起见,我们还在参数周围添加双引号,以防它也包含空格。