Jump to content
Sign in to follow this  
meisandy

Get windows created by the program

Recommended Posts

meisandy

Hi guys,

This is just a general query, but it is related to >one of my previous topics in some ways. If a program generates 'sub-windows', i.e if file download dialogs are created that belong to the script's process, is there any way to return an array or something with the information, or handles for these windows?

Hopefully that makes sense.

Thanks in advance

Share this post


Link to post
Share on other sites
Danyfirex

Look helpfile winlist function

Local $var = WinList()

For $i = 1 To $var[0][0]
    ; Only display visble windows that have a title
    If $var[$i][0] <> "" And IsVisible($var[$i][1]) Then
        MsgBox(0, "Details", "Title=" & $var[$i][0] & @LF & "Handle=" & $var[$i][1])
    EndIf
Next

Func IsVisible($handle)
    If BitAND(WinGetState($handle), 2) Then
        Return 1
    Else
        Return 0
    EndIf

EndFunc   ;==>IsVisible

Share this post


Link to post
Share on other sites
Chimp

or maybe also WinGetProcess () can do to your case

here something similar?

bye


small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Share this post


Link to post
Share on other sites
jdelaney

#include <Array.au3>

#include <WinAPI.au3>
$hWin = WinGetHandle("your window") ; This is the parent window
$iPID = WinGetProcess($hWin)
$iCurrentPid = ""
$aWin = WinList()
For $i = UBound($aWin)-1 To 0 Step -1
    _WinAPI_GetWindowThreadProcessId($aWin[$i][1], $iCurrentPid)
    If $iCurrentPid <> $iPID Then
        _ArrayDelete($aWin,$i)
    EndIf
Next

_ArrayDisplay($aWin)

or:

#include <constants.au3>
#include <WinAPI.au3>
$hWin = WinGetHandle("your window") ; This is the parent window
$iPID = WinGetProcess($hWin)

$hWin = _WinAPI_GetWindow($hWin, $GW_HWNDFIRST)
$end= _WinAPI_GetWindow($hWin, $GW_HWNDLAST)

$iCurrentPid = ""
While True
    $hWin = _WinAPI_GetWindow($hWin, $GW_HWNDNEXT)
    _WinAPI_GetWindowThreadProcessId($hWin, $iCurrentPid)
    If $iCurrentPid = $iPID Then
        ConsoleWrite($hWin & " state=[" & WinGetState($hWin) & "] title=[" & WinGetTitle($hWin) & "]" & @CRLF)
    EndIf
    If $hWin = $end Then ExitLoop
WEnd
; many of the handles returned will not be visible, but you can add checks on the wingetstate inside the if statement



Edited by jdelaney

IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.

Share this post


Link to post
Share on other sites
meisandy

Thank you very much everyone. You all showed me exactly what I was looking for!

I'm going to mark jdelaney's answer as the one that solved the topic, but only because it is the more complete of the three. :)

Share this post


Link to post
Share on other sites

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
Sign in to follow this  

  • Similar Content

    • VITSUSA
      By VITSUSA
      I am using window XP in my desktop, so I want to convert basic disk to a dynamic disk, so how it is possible?
    • nacerbaaziz
      By nacerbaaziz
      Hello my friends
      I have an inquiry after your permission
      I found a function to get the special line commands for any operation
      It requires the name of the process to be searched
      I want to use it to know the process
      Is this possible with this function
      Here is the code
       
      Func commandLineGet($proc, $strComputer=".")
      dim $array[1]
      local $ArrayNumber
      local $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
      local $oProcessColl = $oWMI.ExecQuery("Select * from Win32_Process where Name= " & '"'& $Proc & '"')
      local $Process
      For $Process In $oProcessColl
      $Process = $Process.Commandline
          ReDim $Array[UBound($Array)+1]
      $ArrayNumber = UBound($Array)-1
      $array[$ArrayNumber] = $Process
      Next
      $ArrayNumber = UBound($Array)-1
      $array[0] = $ArrayNumber
      return $array
      EndFunc
    • simy8891
      By simy8891
      Hi guys,
      It's been a while since I wrote my last message here and a while since I used AutoIt. I'm currently sort of desperate and I'm trying to find some help in regards of getting the network usage per process!
      I'm not interested in the total network usage of the NIC, but only on a specific PID's network utilization. They idea is to collect the amount of traffic uploaded and downloaded by a list of specific processes. So far Process Hacker and Process Explorer are capable of getting what I need, but I need to use these numbers in another script so they're sort of useless to me. I can't seem to find a way around it.
      Any idea, help is greatly appreciated.
      Thanks
    • Gyba
      By Gyba
      Hello,
      I have the below toolbar which has buttons that are not visible for the Window Info tool.

      So, in order to be able to click on those buttons, I searched the forum and found the below script which returns all controls for a given window.
      Now that I know the data of the buttons I tried to use the below commands to click a button.  Without any success  :
       
      ;Using the ClassNN ControlClick($HDL, "", "[ClassNN:WindowsForms10.COMBOBOX.app.0.33c0d9d2]") ; Using the button handle ControlClick($HDL, "", 0x001205E2) ; trying to go through the array and select the desired button #include <Functions.au3> #include <Array.au3> $HDL = WinWait("GNB_L_Ro") WinActivate($HDL) $ControlList = _GetAllWindowsControls($HDL) Sleep(1000) ControlClick($HDL, "", $ControlList[37][2]) _ArrayDisplay($ControlList) ;_GetAllWindowsControls function is defined in Functions.au3 and contains the script from the above link.  Any suggestions on how to click one of those buttons? Any help is more than appreciated.
      Thank you!
    • XaelloNegative
      By XaelloNegative
      Hi,
      I'm currently saving process time stamps of my employer's other employees and saving it in a text document as data storage. However, my employer wants it to be processed in a day to day basis to generate their average process time per day. How can I compare today from yesterday and so on and so forth with the succeeding days? Whats the best approach to this?
      Thank you.
      ~XN~
×