用户单击按钮时如何在 VBS 用户定义函数中传递字符串值参数(HTA 应用程序)

How to pass a string value argument in VBS User-defined funtions when the user clicks a button (HTA Application)

所以,我正在尝试制作一个程序,我可以在其中定义一个按钮中的程序,然后 运行 它。在此代码块中(如下所示),我编写了函数,但是当我启动程序时,出现此错误:

Line 19, Char 31: Cannot use parenthesis when calling a sub

我不是要创建子例程,而是要创建用户定义的函数。我该如何解决这个问题?

代码:

<html>
    <head>
        <title>Program Launcher</title>
        <script language="VBScript">
            set objShell = CreateObject("Wscript.Shell")

            Function something(Prog, waitProcess)
                objShell.Run Prog, 0, waitProcess
            End Function
        </script> 
        <style>

        </style>
    </head>
    <body>
        <p id="Test">
            ThisIsATest
        </p>
        <button onclick="something('notepad.exe')">TestObject</button>
    </body>
</html>

运行这段代码的实际错误是:

Wrong number of arguments or invalid property assignment: 'something'

要解决此问题,您只需调整 onclick 事件处理程序以匹配 something(Prog, waitProcess) 函数签名。

下一个问题是事件处理程序是子过程而不是函数,因此无论您是否使用函数,当分配给事件处理程序时,它都会将其视为子过程,这就是下一个问题的原因;

Cannot use parenthesis when calling a sub

要解决此问题,您可以;

  1. 去掉括号

    onclick="something 'notepad.exe', True"
    
  2. 使用Call

    onclick="Call something('notepad.exe', True)"
    

这是一个使用 CallMsgBox() 输出传递给事件处理程序的值的示例。

<html>
    <head>
        <HTA:APPLICATION ID="Test" 
            BORDER="thick" 
            BORDERSTYLE="complex"/>
        <title>Program Launcher</title>
        <style>

        </style>
        <script language="VBScript">
            Sub something(Prog, waitProcess)
                MsgBox("Triggered: " & Prog & ", " & waitProcess)
                Dim objShell: Set objShell = CreateObject("WScript.Shell")
                Call objShell.Run("cmd /c " & Prog, 0, waitProcess)
            End Sub
        </script>
    </head>
    <body>
        <p id="Test">
            ThisIsATest
        </p>
        <button onclick="Call something('notepad.exe', True)">TestObject</button> 
    </body>
</html>