我正在使用自动化运行Visio,并且在获得Visio进程的进程ID以检查它何时完成时遇到了问题。下面是我的VB脚本:
Set visio = CreateObject("Visio.InvisibleApp")
Wscript.Echo visio.ProcessID
Set document = visio.Documents.OpenEx("somefile.vsd", &H88)
document.ExportAsFixedFormat 1, "somefile.pdf", 1, 0
visio.Quit并使用cscript // nologo运行它。
问题是,visio.ProcessID返回的数字不是实际的Windows (例如,当实际进程ID为8146时,为6613 )。cscript主机似乎在Visio进程退出之前完成,导致清理临时文件时出现问题。
以下是Visio参考说明:
因此,问题是:如何获得Visio进程ID或检测它何时正确退出?
谢谢!
发布于 2020-03-12 09:41:09
刚才在Visio.Application.ProcessID的帮助中注意到了这一点:
“ProcessID返回的值与当前Visio实例的不相同。”
因此,我想这些只是为了区分Visio的多个实例。
还有Visio.Application.WindowHandle32和Visio.Application.WindowHandle,这可能会有所帮助,尽管对于一个不可见的应用实例来说可能不是那么有用。
发布于 2012-08-05 22:14:52
我看不出这个身份对你有什么帮助。我怀疑你在visio上有个错误。你试过了吗
on error resume next在每一行之后,都会出现错误
if err.number <> 0 then
wscript.echo err.description
err.clear
end if如果省略参数,似乎存在问题,所以请全部使用它们。有关值,请参见http://msdn.microsoft.com/en-us/library/office/ms409271(v=office.12).aspx。在退出使用document.saved = true之前,可以先检查结果文件是否存在。
编辑:检查进程是否正在运行,是否必须修改服务的名称(检查the )
set service = GetObject ("winmgmts:")
for each Process in Service.InstancesOf ("Win32_Process")
If lcase(Process.Name) = "visio.exe" then
wscript.echo "visio still running"
wscript.quit
End If
next
wscript.echo "visio no longer running"EDIT2:要获取active visio应用程序的processid (如果多个Visio实例正在运行,则GetObject返回活动实例。当程序是作为附加或双击形状运行时,活动实例就是程序运行的对象。否则,它就是最近运行或被带到最前面的实例。如果没有运行Visio实例,GetObject将导致一个错误) cfr http://webmail.vh.com.tw/Microsoft/Developing%20Microsoft%20Visio%20Solutions/27.htm
set appObj = GetObject(, "visio.application")
if appObj Is Nothing Then
wscript.echo "There is no active Visio."
else
wscript.echo "ProcessID: " & appObj.ProcessID
end ifhttps://stackoverflow.com/questions/10648180
复制相似问题