我有一个工作在Excel工作簿上的.vbs文件。现在假设在系统3 EXCEL.EXE进程正在运行的情况下,现在有什么方法可以找出哪一个是由main.vbs脚本打开的?我们如何识别两个由不同对象打开的excel.exe过程?
1
A
回答
1
使用Get-WMIObject win32_process
得到所有进程的列表。查看ParentProcessId
成员以查看哪个进程生成了哪个Excel实例。
VB脚本通过WScript的或CScript将执行,所以你需要在正确的父母先看看。
请注意,Windows不会回收进程标识。也就是说,在时刻t0,pid1000不一定是与时刻t1相同的处理。
附录:
使用-Computername
切换到另一个指定的WMI查询的计算机。如果没有-Computername
交换机,则假定为localhost。本地主机也被称为.
,它在上面的VBScript答案中使用。像这样,
#Get process list from Server01, assuming you have sufficient rights
Get-WMIObject win32_process -Computername server01
2
即使你标记这个PowerShell的,这里有一个VBS唯一的选择将可能需要根据您的Excel版本的一些修修补补(我有2003对这个PC):
'Create Excel Application for demo purposes only
Dim ex: Set ex = CreateObject("Excel.Application")
Dim objWMIService, objProcess, colProcess
Dim strComputer, strList
strComputer = "." 'Change if you want to run on another computer
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
'Look only at Excel process name
Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where NAME = 'EXCEL.exe'")
'Get the list of Processes, included only for demo purposes
For Each objProcess In colProcess
strList = strList & vbCr & objProcess.commandline
Next
MsgBox strList ' Displayed "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE"
'"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE"/automation - Embedding
' Second row was the created Object.
'Find processes that match the Created Object format commandline
Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where CommandLine Like '%EXCEL.exe"" /automation -Embedding'")
For Each objProcess In colProcess
'Do something with process
objProcess.Terminate
Next
'Next line will cause runtime error due to process already being terminated.
ex.Quit
美与此类似的方法是,通过使用objProcess.Commandline,您可以找到发送到应用程序的命令行开关,您可以使用它来查明特定的进程。例如,如果您有一个.bat文件来打开Excel文件,如下所示:start Excel.exe C:\example.xls
该进程将在进程Commandline属性中包含C:\example.xls
。
相关问题
- 1. 我如何识别此过程已打开的处理?
- 2. 我如何识别此过程已打开的处理?
- 3. java如何识别这两个对象是相同的类型
- 4. 如何识别已打开浏览器的对象?
- 5. 如何uniquly识别同一页面的两个对象具有相同的URL
- 6. 两个用户输入是不同的,但程序识别它们相同
- 7. 识别JSON对象由不同数量的项目
- 8. 我在一个对象中创建了两个不同的对象。在打印它们时,只显示最后一个修改过的对象。如何创建?
- 9. 如何找到上次打开的EXCEL.EXE打开时间?
- 10. 如何建模由两个不同实体拥有的对象?
- 11. 如何编程识别我的家庭WiFi打开VOIP
- 12. 如何比较两个不同类别的对象?
- 13. Softlayer api:如何识别两个VLAN匹配VLAN路由器对?
- 14. 识别两个表中的不同行
- 15. 我如何识别不同的pickerViews?
- 16. 我们两个不同
- 17. 如何杀死第二和第三个打开的EXCEL.EXE?
- 18. 由两个不同的类别筛选
- 19. 如何训练单个对象识别?
- 20. 两个不同的对象
- 21. 如何识别同一图像中的多个对象
- 22. 我们如何通过程序关闭打开的Url?
- 23. 如何识别两个不同版本的gcc是否兼容?
- 24. 如何识别两个不同鼠标的点击?
- 25. 跨两列识别相同的对
- 26. 问题通过两个不同的按钮打开相同的对话框
- 27. 我们如何根据名称打开不同的模态?
- 28. 如何识别对象数组中的哪个对象?
- 29. 两个不同的对象打印属性相同的值
- 30. 识别两个触摸点击两个不同的子视图
我想要全局运行这个脚本,所以我怎么能够在那里给他们的计算机名称,就像你的link.please指南中提到的'code' – CodeLover
Excel作为一个COM服务器运行,其中ppid = winlogon.exe ,而不是VBS过程。 – EJP