Я справился с этими функциями в качестве обходного пути.Первые извлекают дескриптор окна на основе заголовка, а вторые извлекают дескриптор по имени класса.Этот второй подход можно использовать для поиска контекстного меню.Также этот класс можно использовать с каркасом робота.
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'))