feat: 微信自动化客服(wechatauto-replica) 干净历史导入 - AI 自动回复/语音收发/朋友圈发布

This commit is contained in:
2026-09-16 10:12:49 +08:00
commit c3b98f4c4e
69 changed files with 19828 additions and 0 deletions
+64
View File
@@ -0,0 +1,64 @@
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)