使用VBA

时间:2017-05-19 16:53:33

标签: excel-vba vba excel

情况 - 我有一个宏,我需要按顺序向两个Firefox窗口发送击键。不幸的是两个窗口都有相同的标题。为了解决这个问题,我已经激活了窗口,发送了我的击键,然后使用F6加载第二个窗口的URL,然后发送击键然后使用F6将其返回到原始页面。

问题是加载网页是不可靠的。页面加载速度变化太大,以至于使用wait命令不一致或不可靠,以确保键击使其进入第二个窗口。

问题 - 我已经阅读了大量帖子,提到app激活将与进程ID一起使用。由于每个窗口都有自己的PID,这将是处理具有相同标题的2个窗口的理想方式。我无法找到具体如何确定具有给定名称的每个窗口的PID的信息。

1 个答案:

答案 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'的每个进程的每个属性。