python win32gui finding child windows

14,386

This code shows hwnd of EditPlus child windows that has WindowsText of some length:

EDIT

You will have to find hwnd of your application, and then use this handle with EnumChildWindows. I extended example code with it. Once you get application hwnd you can enumerate only its windows. When you give 0 as hwnd to EnumChildWindows you will get handles of all runing windows. Add some prints to my code and check it!

Extended code:

import win32gui

MAIN_HWND = 0

def is_win_ok(hwnd, starttext):
    s = win32gui.GetWindowText(hwnd)
    if s.startswith(starttext):
            print s
            global MAIN_HWND
            MAIN_HWND = hwnd
            return None
    return 1


def find_main_window(starttxt):
    global MAIN_HWND
    win32gui.EnumChildWindows(0, is_win_ok, starttxt)
    return MAIN_HWND


def winfun(hwnd, lparam):
    s = win32gui.GetWindowText(hwnd)
    if len(s) > 3:
        print("winfun, child_hwnd: %d   txt: %s" % (hwnd, s))
    return 1

def main():
    main_app = 'EditPlus'
    hwnd = win32gui.FindWindow(None, main_app)
    print hwnd
    if hwnd < 1:
        hwnd = find_main_window(main_app)
    print hwnd
    if hwnd:
        win32gui.EnumChildWindows(hwnd, winfun, None)

main()
Share:
14,386
nabizan
Author by

nabizan

Updated on June 07, 2022

Comments

  • nabizan
    nabizan almost 2 years

    for example at first you have to find hwnd of skype

    hwnd = win32gui.FindWindow(None, 'skype')
    

    and than all his child windows and their titles

    child = ???
    

    any idea?

  • nabizan
    nabizan almost 14 years
    im a little bit confused here ... when i turn on an aplication it returns main hwnd and tree childs despite the fact there are no child windows and when the application isnt running it prints far too many results when there shouldnt be any btw is there a way to determinate whitch window is running under whitch process?