Jump to content

Recommended Posts

Posted

I have a program which could have several instances open, all of which would appear the same through winmatch of titles/classes etc.

Is there a away to get a handle for the window when launching it via it's PID?

Posted

I ended up writing my own function and luckily I did...

That function in the FAQ doesn't seem to have a timeout, which could result in endless loops.

Also some processes seem to be attached to more than one window. Try running that function with notepad for instance, just hangs for me.

Here's what I came up with:

Func WinHandFromPID($pid, $winTitle="", $timeout=8)
    Local $secs = 0
    Do
        $wins = WinList($winTitle)
        For $i = 1 To UBound($wins)-1
            If (WinGetProcess($wins[$i][1]) == $pid) And (BitAND(WinGetState($wins[$i][1]), 2)) Then Return $wins[$i][1]
        Next
        Sleep(1000)
        $secs += 1
    Until $secs == $timeout
EndFunc

Only get's the handle for visible windows.

Posted (edited)

Only get's the handle for visible windows.

Only gets the handle for the FIRST visible window. As was pointed out earlier, a process can and often does have multiple windows. Try it this way:
#include <Array.au3>

; ...

; Returns an array of all Windows associated with a given process
Func WinHandFromPID($pid, $winTitle = "", $timeout = 8)
    Local $secs = TimerInit()
    Do
        $wins = WinList($winTitle)
        For $i = UBound($wins) - 1 To 1 Step -1
            If (WinGetProcess($wins[$i][1]) <> $pid) Or (BitAND(WinGetState($wins[$i][1]), 2) = 0) Then _ArrayDelete($wins, $i)
        Next
        $wins[0][0] = UBound($wins) - 1
        If $wins[0][0] Then Return SetError(0, 0, $wins)
        Sleep(1000)
    Until TimerDiff($secs) >= $timeout * 1000
    Return SetError(1, 0, $wins)
EndFunc   ;==>WinHandFromPID

:blink:

Edited by PsaltyDS
Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law
  • 7 years later...
  • 2 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...