Ermitteln der Prozess-ID-mit VBA

Situation – ich habe ein makro, wo ich zu senden Sie Tastenanschläge an zwei Firefox-Fenster um. Leider sind beide Fenster haben den gleichen Titel. Um dies zu umgehen habe ich aktiviert das Fenster, schickte meine Tastenanschläge und dann F6 zum laden der URL in das zweite Fenster, und senden Sie dann die Tastatureingaben verwenden Sie dann die F6-Taste zur Rückkehr zu der ursprünglichen Seite.

Das Problem ist, dass das laden der Webseiten, die unzuverlässig ist. Das laden der Seite beschleunigt sich so stark unterscheiden, dass mit einem wait-Befehl ist nicht konsistent oder zuverlässig zu gewährleisten Tastendruck macht es zum zweiten Fenster.

Frage –
Ich habe gelesen, eine Streuung der Beiträge, die erwähnt, dass die app aktivieren, wird die Arbeit mit der Prozess-ID ist. Da jedes Fenster hätte seine eigene PID, dass wäre der ideale Weg, um zu behandeln, 2 Fenster mit dem gleichen Titel. Ich bin nicht in der Lage, Informationen zu finden, speziell, wie, um zu bestimmen, die PID jedes Fenster mit einem bestimmten Namen.

  • Sind das Firefox-Fenster geöffnet, aus dem Sie Ihren code?
  • Derzeit nicht, aber Sie werden könnte. Es gibt nichts hindert mich daran, das öffnen der einzelnen Fenster, aus dem code.
InformationsquelleAutor viper941 | 2017-05-19



One Reply
  1. 3

    Können Sie etwas wie das folgende. Du wirst basteln müssen mit den anderen Informationen zur Verfügung, die in der „Win32_Process“ Klasse, um herauszufinden, welches Fenster ist das. Es ist auch wichtig zu beachten, dass ein Fenster könnte bedeuten, dass viele Prozesse.

    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

    Da Sie wahrscheinlich wollen, um zu Sondieren, mit WMI etwas, möchten Sie vielleicht hinzufügen eines Tools>>Verweise auf die Microsoft WMI-Bibliothek, so dass Sie nicht haben, um mit Dim bla as Object. Dann können Sie Haltepunkte hinzufügen und sehen, was Los ist im Einheimischen Bereich.

    Nach dem hinzufügen der Referenz:

    Public Sub getDetailsByAppName()
    
        Dim objProcessSet As WbemScripting.SWbemObjectSet
        Dim objProcess As WbemScripting.SWbemObject
        Dim objServices As WbemScripting.SWbemServices
        Dim objLocator As WbemScripting.SWbemLocator
    
        'set up wmi for local computer querying
        Set objLocator = New WbemScripting.SWbemLocator
        Set objServices = objLocator.ConnectServer(".") 'local
    
        'Get all the gory details for a name of a running application
        Set objProcessSet = objServices.ExecQuery("SELECT * FROM Win32_Process WHERE name = ""firefox.exe""", , 48)
    
        RecordCount = 1
        'Loop through each process returned
        For Each objProcess In objProcessSet
            'Loop through each property/field
            For Each Field In objProcess.Properties_
                Debug.Print RecordCount, Field.Name, Field.Value
            Next
            RecordCount = RecordCount + 1
        Next
    
        Set objProcessSet = Nothing
        Set objServices = Nothing
        Set objLocator = Nothing
    
    
    End Sub

    Wird, drucken Sie jede Eigenschaft, jeden Prozess gefunden für den Namen ‚firefox.exe‘.

    • Danke. Der code, den Sie zur Verfügung gestellt hat, genau wie du sagtest. Ich denke, ich missverstanden haben andere Beiträge, die ich gelesen habe. Ich war unter den Eindruck, dass jedes Fenster müsste eine eindeutige PID subbed aus der Parent-PID. Jedoch bekomme ich nur eine PID, unabhängig davon, ob ich 1, 2, oder 10 Fenster offen.
    • Ich denke, es hängt von dem Programm, aber es ist definitiv nicht eine sichere Wette, anzunehmen, dass windows und Prozesse sind 1:1. Ich würde davon ausgehen, mit Firefox kann es davon abhängen, wie Sie starten jedes Fenster. Wie bei excel können Sie mehrere Arbeitsmappen in der gleichen „Anwendung“ oder mehrere „Anwendungen“ jeweils mit mehreren Arbeitsmappen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.