【问题标题】:How to pass a string value argument in VBS User-defined funtions when the user clicks a button (HTA Application)用户单击按钮时如何在 VBS 用户定义的函数中传递字符串值参数(HTA 应用程序)
【发布时间】:2023-06-30 10:02:01
【问题描述】:

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

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>

【问题讨论】:

    标签: vbscript hta


    【解决方案1】:

    运行此代码时得到的实际错误是:

    参数数量错误或属性分配无效:'something'

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

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

    调用子时不能使用括号

    要解决此问题,您可以;

    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>
    

    【讨论】:

      最近更新 更多