情况 - 我有一个宏,我需要按顺序向两个Firefox窗口发送击键。不幸的是两个窗口都有相同的标题。为了解决这个问题,我已经激活了窗口,发送了我的击键,然后使用F6加载第二个窗口的URL,然后发送击键然后使用F6将其返回到原始页面。
问题是加载网页是不可靠的。页面加载速度变化太大,以至于使用wait命令不一致或不可靠,以确保键击使其进入第二个窗口。
问题 - 我已经阅读了大量帖子,提到app激活将与进程ID一起使用。由于每个窗口都有自己的PID,这将是处理具有相同标题的2个窗口的理想方式。我无法找到具体如何确定具有给定名称的每个窗口的PID的信息。
答案 0 :(得分:2)
您可以使用以下内容。您必须修改Win32_Process类中可用的不同信息,以确定哪个窗口是哪个窗口。同样重要的是要记住,一个窗口可能意味着许多过程。
Public Sub getPID()
Dim objServices As Object, objProcessSet As Object, Process As Object
Set objServices = GetObject("winmgmts:\\.\root\CIMV2")
Set objProcessSet = objServices.ExecQuery("SELECT ProcessID, name FROM Win32_Process WHERE name = ""firefox.exe""", , 48)
'you may find more than one processid depending on your search/program
For Each Process In objProcessSet
Debug.Print Process.ProcessID, Process.Name
Next
Set objProcessSet = Nothing
End Sub
由于您可能希望稍微探索WMI的选项,因此您可能需要向Microsoft WMI库添加工具>>引用,这样您就不必处理{{1 }}。然后,您可以添加断点并查看“本地”窗格中的内容。
添加参考后:
Dim bla as Object
这将打印出名称为firefox.exe'的每个进程的每个属性。