# 检查微信是否已经启动 wechat_hwnd = findwindows.find_windows(title="微信", class_name="WeChatMainWndForPC") if wechat_hwnd: # 如果微信已经启动,则直接获取句柄 hwnd = win32gui.FindWindow("WeChatMainWndForPC", None) # 获取微信主窗口句柄 app = Application().connect(handle=hwnd) else: # 如果微信未启动,则启动之后等待微信启动完成后获取句柄 app = Application().start("D:/Tencent/WeChat/WeChat.exe") time.sleep(30) # 等待微信启动 hwnd = win32gui.FindWindow("WeChatMainWndForPC", None) # 获取微信主窗口句柄 我觉得以上代码有些冗余,应该如何优化
时间: 2024-03-19 12:44:04 浏览: 146
你的想法是对的,以上代码可以进行一定的优化来避免重复的代码。以下是一种可能的优化方案:
```python
import time
import win32gui
from pywinauto import Application
def get_wechat_hwnd():
wechat_hwnd = win32gui.FindWindow("WeChatMainWndForPC", None)
if wechat_hwnd:
return wechat_hwnd
app = Application().start("D:/Tencent/WeChat/WeChat.exe")
for i in range(3):
wechat_hwnd = win32gui.FindWindow("WeChatMainWndForPC", None)
if wechat_hwnd:
return wechat_hwnd
time.sleep(10)
raise Exception("无法获取微信窗口句柄")
hwnd = get_wechat_hwnd()
app = Application().connect(handle=hwnd)
```
这个优化方案将获取微信窗口句柄的过程封装到了一个函数中。函数首先尝试获取微信窗口句柄,如果获取成功则返回窗口句柄;如果获取失败,则启动微信并等待微信启动完成后再次尝试获取窗口句柄。函数最多会尝试3次获取窗口句柄,如果仍然无法获取则抛出异常。这样可以避免代码的重复,同时也增加了代码的可读性。
阅读全文