Получить окно Z-Order с расширениями Python для Windows - PullRequest
4 голосов
/ 17 июня 2011

Есть ли способ получить z-порядок окон, используя Python Windows Extensions ?Или, альтернативно, есть ли способ сделать это с помощью другого модуля?Обычный способ сделать это с помощью GetTopWindow и GetNextWindow, но ни одна из этих функций не появляется в модуле win32gui.

В настоящее время я делаю это, но этоне учитывает z-порядок окон:

import win32gui
def get_windows():
    def callback(hwnd, lst):
        lst.append(hwnd)
    lst = []
    win32gui.EnumWindows(callback, lst)
    return lst

В идеале я хотел бы что-то вроде этого: (это не работает)

import win32gui
import win32con
def get_windows():
    '''Returns windows in z-order (top first)'''
    lst = []
    top = win32gui.GetTopWindow()
    if top is None: return lst
    lst.append(top)
    while True:
        next = win32gui.GetNextWindow(lst[-1], win32con.GW_HWNDNEXT)
        if next is None: break
        lst.append(next)
    return lst

Однако,Функции GetTopWindow и GetNextWindow отсутствуют, поэтому я не могу.

ОБНОВЛЕНИЕ:

Полагаю, я был слишком быстр, чтобы попросить о помощи.Я понял это с помощью ctypes.Надеюсь, кто-то еще найдет это полезным.

import win32con
import ctypes
def get_windows():
    '''Returns windows in z-order (top first)'''
    user32 = ctypes.windll.user32
    lst = []
    top = user32.GetTopWindow(None)
    if not top:
        return lst
    lst.append(top)
    while True:
        next = user32.GetWindow(lst[-1], win32con.GW_HWNDNEXT)
        if not next:
            break
        lst.append(next)
    return lst
...