1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
from pywinauto import Application, Desktop
from pywinauto.timings import wait_until_passes, TimeoutError
import os
import logging
# 确保日志配置是第一个被执行的语句
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
def check_path():
path = r"D:\腾讯会议\WeMeet\WeMeetApp.exe"
if not os.path.exists(path):
logging.error(f"路径 {path} 不存在")
return False
if not os.access(path, os.X_OK):
logging.error(f"路径 {path} 不可执行")
return False
logging.info(f"路径 {path} 存在且可执行")
return True
def find_window(app, title_re):
try:
window = app.window(title_re=title_re)
logging.info(f"找到窗口: {window.window_text()}")
return window
except Exception as e:
logging.error(f"查找窗口时出错: {e}")
return None
def print_all_window_titles():
desktop = Desktop(backend="uia")
for window in desktop.windows():
logging.info(f"窗口标题: {window.window_text()}")
def tx_run():
logging.debug("tx_run 函数开始执行")
# 启动腾讯会议
try:
app = Application(backend="uia").start(r"D:\腾讯会议\WeMeet\WeMeetApp.exe")
logging.debug("启动腾讯会议完成")
except Exception as e:
logging.error(f"启动腾讯会议时出错: {e}")
return
# 打印所有窗口标题
print_all_window_titles()
# 等待腾讯会议窗口出现
try:
wait_until_passes(60, 1, lambda: app.window(title_re=".*腾讯会议.*").exists())
logging.info("腾讯会议窗口已找到")
except TimeoutError:
logging.error("腾讯会议窗口未在规定时间内出现")
return
# 连接到腾讯会议窗口
main_window = find_window(app, ".*腾讯会议.*")
if main_window is None:
return
# 打印窗口中的所有控件信息
main_window.print_control_identifiers()
# 点击“加入会议”按钮
try:
join_button = main_window.child_window(title="加入会议", control_type="Button")
logging.info(join_button.window_text()) # 打印按钮标题以验证控件是否找到
join_button.click()
logging.info("点击“加入会议”按钮完成")
except Exception as e:
logging.error(f"点击“加入会议”按钮时出错: {e}")
return
# 等待加入会议窗口出现
try:
wait_until_passes(60, 1, lambda: app.window(title_re=".*加入会议.*").exists())
logging.info("加入会议窗口已找到")
except TimeoutError:
logging.error("加入会议窗口未在规定时间内出现")
return
# 输入会议号
meeting_id = "123456789" # 替换为实际的会议号
try:
meeting_id_edit = main_window.child_window(title="会议号", control_type="Edit")
logging.info(meeting_id_edit.window_text()) # 打印编辑框标题以验证控件是否找到
meeting_id_edit.type_keys(meeting_id)
logging.info("输入会议号完成")
except Exception as e:
logging.error(f"输入会议号时出错: {e}")
return
# 点击“加入”按钮
try:
join_meeting_button = main_window.child_window(title="加入", control_type="Button")
logging.info(join_meeting_button.window_text()) # 打印按钮标题以验证控件是否找到
join_meeting_button.click()
logging.info("点击“加入”按钮完成")
except Exception as e:
logging.error(f"点击“加入”按钮时出错: {e}")
return
# 等待会议界面出现
try:
wait_until_passes(60, 1, lambda: app.window(title_re=".*腾讯会议.*").exists())
logging.info("会议界面已找到")
except TimeoutError:
logging.error("会议界面未在规定时间内出现")
return
# 静音麦克风
try:
mute_button = main_window.child_window(title="麦克风", control_type="Button")
logging.info(mute_button.window_text()) # 打印按钮标题以验证控件是否找到
mute_button.click()
logging.info("静音麦克风完成")
except Exception as e:
logging.error(f"静音麦克风时出错: {e}")
return
# 退出会议
try:
end_meeting_button = main_window.child_window(title="结束会议", control_type="Button")
logging.info(end_meeting_button.window_text()) # 打印按钮标题以验证控件是否找到
end_meeting_button.click()
logging.info("结束会议完成")
except Exception as e:
logging.error(f"结束会议时出错: {e}")
return
logging.debug("tx_run 函数执行完毕")
if __name__ == "__main__":
try:
if check_path():
tx_run()
except Exception as e:
logging.error(f"程序执行时出错: {e}")