为什么我在 objShell 上收到 "necessary object" 错误?
Why do I get a "necessary object" error on objShell?
我不知道为什么在此 VBS 代码的 Set objShell =
语句中出现错误(它在 HTML 中)。我正在为名为 Doom 的游戏开发 .HTA 启动器,此 VBScript 用于 select 游戏并使用一些参数启动它。
Dim pwad, warp, skill, execDoom, execPwad, execWarp, execSkill, rep, fso, file, OpFScript, WScript, objShell
Set objShell = WScript.CreateObject("WScript.Shell")
Set pwad = document.GetElementById("inpFILE")
Set warp = document.GetElementById("inpMAP")
Set skill = document.GetElementById("inpSKILL")
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("C:\ZDLRemastered\launcher\ScriptOpFile.txt", 1)
OpFScript = file.ReadAll
Function GetFileDlgEx(sIniDir,sFilter,sTitle)
Set oDlg = CreateObject("WScript.Shell").Exec("mshta.exe & OpFScript")
oDlg.StdIn.Write "var iniDir='" & sIniDir & "';var filter='" & sFilter & "';var title='" & sTitle & "';"
GetFileDlgEx = oDlg.StdOut.ReadAll
End Function
sFilter = "Doom Archive (*.wad)|*.wad|"
sTitle = "Select a Doom IWAD"
rep = GetFileDlgEx(Replace(sIniDir,"\","\"),sFilter,sTitle)
execDoom = "C:\ZDLRemastered\gzdoom\gzdoom.exe -config C:\ZDLRemastered\gzdoom\gzconfig.ini -iwad "
execPwad = " -file "
execWarp = " -warp "
execSkill = " -skill "
objShell.Run execDoom & Chr(34) & rep & Chr(34) & execPwad & Chr(34) & pwad & Chr(34) & execWarp & Chr(34) & warp & Chr(34) & execSkill & Chr(34) & skill & Chr(34)
这是错误:
necessary object: " -
HTA 运行 在与常规 VBScript 不同的引擎中(mshta.exe
对比 wscript.exe
/cscript.exe
)。 HTA 引擎不提供内在的 WScript
对象,因此 WScript.CreateObject()
或 WScript.Sleep()
或 WScript.Quit()
将不起作用。
虽然创建对象不需要该内部对象,因为 VBScript 也有一个全局函数 CreateObject()
(即 not the same as WScript.CreateObject()
)。
改变这个:
Set objShell = WScript.CreateObject("WScript.Shell")
进入这个:
Set objShell = CreateObject("WScript.Shell")
问题就会消失。
我不知道为什么在此 VBS 代码的 Set objShell =
语句中出现错误(它在 HTML 中)。我正在为名为 Doom 的游戏开发 .HTA 启动器,此 VBScript 用于 select 游戏并使用一些参数启动它。
Dim pwad, warp, skill, execDoom, execPwad, execWarp, execSkill, rep, fso, file, OpFScript, WScript, objShell
Set objShell = WScript.CreateObject("WScript.Shell")
Set pwad = document.GetElementById("inpFILE")
Set warp = document.GetElementById("inpMAP")
Set skill = document.GetElementById("inpSKILL")
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("C:\ZDLRemastered\launcher\ScriptOpFile.txt", 1)
OpFScript = file.ReadAll
Function GetFileDlgEx(sIniDir,sFilter,sTitle)
Set oDlg = CreateObject("WScript.Shell").Exec("mshta.exe & OpFScript")
oDlg.StdIn.Write "var iniDir='" & sIniDir & "';var filter='" & sFilter & "';var title='" & sTitle & "';"
GetFileDlgEx = oDlg.StdOut.ReadAll
End Function
sFilter = "Doom Archive (*.wad)|*.wad|"
sTitle = "Select a Doom IWAD"
rep = GetFileDlgEx(Replace(sIniDir,"\","\"),sFilter,sTitle)
execDoom = "C:\ZDLRemastered\gzdoom\gzdoom.exe -config C:\ZDLRemastered\gzdoom\gzconfig.ini -iwad "
execPwad = " -file "
execWarp = " -warp "
execSkill = " -skill "
objShell.Run execDoom & Chr(34) & rep & Chr(34) & execPwad & Chr(34) & pwad & Chr(34) & execWarp & Chr(34) & warp & Chr(34) & execSkill & Chr(34) & skill & Chr(34)
这是错误:
necessary object: " -
HTA 运行 在与常规 VBScript 不同的引擎中(mshta.exe
对比 wscript.exe
/cscript.exe
)。 HTA 引擎不提供内在的 WScript
对象,因此 WScript.CreateObject()
或 WScript.Sleep()
或 WScript.Quit()
将不起作用。
虽然创建对象不需要该内部对象,因为 VBScript 也有一个全局函数 CreateObject()
(即 not the same as WScript.CreateObject()
)。
改变这个:
Set objShell = WScript.CreateObject("WScript.Shell")
进入这个:
Set objShell = CreateObject("WScript.Shell")
问题就会消失。