我正在使用自动化运行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(例如,实际进程ID为8146时为6613)。在Visio进程退出之前,cscript主机似乎已完成,导致清理临时文件时出现问题。
以下是Visio参考说明:
所以问题是:如何获取Visio进程ID或检测它何时正确退出?
谢谢!
答案 0 :(得分:0)
无法看到此ID如何帮助您。我怀疑你在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
之前,您可以先检查结果文件是否存在。
编辑:检查进程是否正在运行,可能是您必须调整服务名称(检查您的téaskmanager)
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:获取活动visio应用程序的processid(如果正在运行多个Visio实例,GetObject将返回活动实例。当程序作为加载项运行或双击形状时,活动instance是运行程序的实例。否则,它是最近运行或带到前面的实例。如果没有运行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 if
答案 1 :(得分:0)
只是在Visio.Application.ProcessID的帮助中注意到了这一点:
“ ProcessID返回的值与当前Visio实例的Windows进程ID不同。”
所以我想这些只是为了您可以区分多个Visio实例。
还有Visio.Application.WindowHandle32和Visio.Application.WindowHandle,这可能会有所帮助,尽管对于不可见的应用程序实例可能不是那么有用。