VBS 脚本适用于 XP 32 位但不适用于 7 64 位
Posted
技术标签:
【中文标题】VBS 脚本适用于 XP 32 位但不适用于 7 64 位【英文标题】:VBS script works on XP 32-bit but not on 7 64-bit 【发布时间】:2011-01-06 20:28:49 【问题描述】:这个脚本(Rob van der Woude 的一个修改)在 XP 32 位上运行良好,但在 7 64 位上失败Set objDialog = CreateObject( "UserAccounts.CommonDialog" )
,出现类似于错误(翻译自荷兰语)ActiveX cannot create the object "UserAccounts.CommonDialog"
.是否有一些不同的方法我必须这样做才能与 Windows 7 兼容?
MsgBox("Your input avi MUST be 60fps, or this script will not work."),0,"IMPORTANT!"
MsgBox("Please select the location of your AVI."),0,"AVI location"
WScript.Echo GetFileName( "", "AVI files (*.avi)|*.avi" )
Function GetFileName( myDir, myFilter )
Dim objDialog
Set objDialog = CreateObject( "UserAccounts.CommonDialog" )
If myDir = "" Then
objDialog.InitialDir = CreateObject( "WScript.Shell" ).SpecialFolders( "MyDocuments" )
Else
objDialog.InitialDir = myDir
End If
If myFilter = "" Then
objDialog.Filter = "All files|*.*"
Else
objDialog.Filter = myFilter
End If
If objDialog.ShowOpen Then
GetFileName = objDialog.FileName
Else
GetFileName = ""
End If
End Function
【问题讨论】:
你有CreateObject失败的错误代码吗? How can I use the common Save As dialog from VBScript?的可能重复 【参考方案1】:有一些在线证据表明“UserAccounts.CommonDialog”未随 Windows Vista(以及因此,Windows 7)提供。
例如,请参阅http://www.msghelp.net/showthread.php?tid=88579
该线程中的最后一项建议使用 MSComDlg.CommonDialog,但有一些注意事项,或者使用 GetOpenFileName API。
如果不是这样,请检查您的注册表,并在执行 CreateObject 时检查 ProcMon 中的脚本操作。您可能遇到“位”问题,您的脚本在 64 位进程中运行,但尝试访问 32 位 COM 对象。如果是这种情况,您也会在 CreateObject("WScript.Shell") 看到错误。
【讨论】:
@David Heffernan,@neurolysis:部分是正确的...您不能直接从 VBScript 调用本机 Windows API 函数,所以GetOpenFileName
不会去工作。没有“位”问题,UserAccounts.CommonDialog
只是一个丑陋的 hack,只能在 Windows XP 中使用。 MSComDlg.CommonDialog
也不是一个好的解决方案。不久前有人提出并回答了一个试图解决根本问题的问题:How can I use the common Save As dialog from VBScript?。【参考方案2】:
也许您需要重新注册 comdlg32.dll? Reference
【讨论】:
以上是关于VBS 脚本适用于 XP 32 位但不适用于 7 64 位的主要内容,如果未能解决你的问题,请参考以下文章
import pymongo 适用于 Python 解释器,但不适用于脚本
sql 脚本适用于 MySQL,但不适用于 google bigquery