Как получить обработчик окна контекстного меню в Python - PullRequest
0 голосов
/ 16 октября 2018

Мне нужно получить обработчик окна контекстного меню для автоматизации настольных приложений Windows.Я использовал модуль win32gui, чтобы найти обработчик окна, но, похоже, он не работает с контекстным меню.

import win32gui

# works fine with normal window
print(hex(win32gui.FindWindow("Micro", None)))
# does not work with context menu
print(hex(win32gui.FindWindow("Context", None)))

1 Ответ

0 голосов
/ 22 октября 2018

Я справился с этими функциями в качестве обходного пути.Первые извлекают дескриптор окна на основе заголовка, а вторые извлекают дескриптор по имени класса.Этот второй подход можно использовать для поиска контекстного меню.Также этот класс можно использовать с каркасом робота.

import win32gui


class AppTopLevelWindowFinder:
    def find_window_handler_by_title(self, name):
        windows = []
        win32gui.EnumWindows(enumHandler, windows)
        for next_window in windows:
            if name in next_window[0]:
                return next_window[2]


    def find_window_handler_by_class(self, classname):
        windows = []
        win32gui.EnumWindows(enumHandler, windows)
        for next_window in windows:
            if classname in next_window[1]:
                return next_window[2]


def enumHandler(hwnd, lwindow):
    if win32gui.IsWindowVisible(hwnd):
        lwindow.append((win32gui.GetWindowText(hwnd), win32gui.GetClassName(hwnd), hex(hwnd)))


newobj = AppTopLevelWindowFinder()
print(newobj.find_window_handler_by_title('Incoming Call'))
print(newobj.find_window_handler_by_class('32768'))
...