65 lines
1.6 KiB
Python
65 lines
1.6 KiB
Python
from wechatauto import uia
|
|
from wechatauto.param import PROJECT_NAME
|
|
from wechatauto.logger import wxlog
|
|
from wechatauto.utils.lock import uilock
|
|
from abc import ABC, abstractmethod
|
|
import win32gui
|
|
from typing import Union
|
|
import time
|
|
|
|
|
|
class BaseUIWnd(ABC):
|
|
_ui_cls_name: str = None
|
|
_ui_name: str = None
|
|
control: uia.Control
|
|
|
|
@abstractmethod
|
|
def _lang(self, text: str): pass
|
|
|
|
def __repr__(self):
|
|
return f"<{PROJECT_NAME} - {self.__class__.__name__} at {hex(id(self))}>"
|
|
|
|
def __eq__(self, other):
|
|
return self.control == other.control
|
|
|
|
def __bool__(self):
|
|
return self.exists()
|
|
|
|
def _show(self):
|
|
if not hasattr(self, 'HWND'):
|
|
self.HWND = self.control.GetTopLevelControl().NativeWindowHandle
|
|
win32gui.ShowWindow(self.HWND, 1)
|
|
win32gui.SetWindowPos(self.HWND, -1, 0, 0, 0, 0, 3)
|
|
win32gui.SetWindowPos(self.HWND, -2, 0, 0, 0, 0, 3)
|
|
self.control.Show()
|
|
|
|
@property
|
|
def pid(self):
|
|
return self.control.ProcessId
|
|
|
|
@uilock
|
|
def close(self):
|
|
try:
|
|
for i in range(2):
|
|
self.control.SendKeys('{Esc}')
|
|
except Exception:
|
|
pass
|
|
|
|
def exists(self, wait=0):
|
|
try:
|
|
result = self.control.Exists(wait)
|
|
return result
|
|
except Exception:
|
|
return False
|
|
|
|
|
|
class BaseUISubWnd(BaseUIWnd):
|
|
root: BaseUIWnd
|
|
parent: None
|
|
|
|
def _lang(self, text: str):
|
|
if getattr(self, 'parent'):
|
|
return self.parent._lang(text)
|
|
else:
|
|
return self.root._lang(text)
|