-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_window.py
More file actions
131 lines (102 loc) · 3.49 KB
/
test_window.py
File metadata and controls
131 lines (102 loc) · 3.49 KB
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
"""
简单测试示例 - 自动化控制记事本
"""
import win32gui
import win32con
import win32api
import time
import subprocess
def test_notepad():
"""测试:自动化控制记事本"""
print("🚀 启动记事本测试...")
# 1. 打开记事本
print("\n[1] 启动记事本...")
subprocess.Popen(['notepad.exe'])
time.sleep(1)
# 2. 查找记事本窗口
print("[2] 查找记事本窗口...")
hwnd = win32gui.FindWindow(None, "无标题 - 记事本")
if not hwnd:
hwnd = win32gui.FindWindow(None, "Untitled - Notepad")
if not hwnd:
print("❌ 未找到记事本窗口")
return
print(f"✅ 找到记事本 (句柄: {hwnd})")
# 3. 查找文本框
print("[3] 查找文本框...")
def find_edit(hwnd, results):
if win32gui.GetClassName(hwnd) == "Edit":
results.append(hwnd)
return True
results = []
win32gui.EnumChildWindows(hwnd, find_edit, results)
if not results:
print("❌ 未找到文本框")
return
edit_hwnd = results[0]
print(f"✅ 找到文本框 (句柄: {edit_hwnd})")
# 4. 激活窗口
print("[4] 激活窗口...")
win32gui.SetForegroundWindow(hwnd)
time.sleep(0.5)
# 5. 输入文本
print("[5] 输入文本...")
text = "Hello from Python!\n这是自动输入的文本。\n测试成功!"
win32api.SendMessage(edit_hwnd, win32con.WM_SETTEXT, 0, text)
print(f"✅ 已输入文本")
# 6. 等待查看
print("\n✨ 测试完成!记事本中应该显示了文本。")
print(" 窗口将保持打开,你可以手动关闭。")
def test_current_window():
"""测试:控制当前窗口"""
print("🚀 当前窗口测试...")
print("⏰ 请在 5 秒内切换到目标窗口(包含文本框)...")
for i in range(5, 0, -1):
print(f" {i}...", end="\r")
time.sleep(1)
print()
# 获取当前窗口
hwnd = win32gui.GetForegroundWindow()
title = win32gui.GetWindowText(hwnd)
print(f"✅ 当前窗口: {title} (句柄: {hwnd})")
# 查找文本框
def find_edit(child_hwnd, results):
if win32gui.GetClassName(child_hwnd) == "Edit":
results.append(child_hwnd)
return True
results = []
win32gui.EnumChildWindows(hwnd, find_edit, results)
if not results:
print("❌ 未找到文本框")
return
edit_hwnd = results[0]
print(f"✅ 找到 {len(results)} 个文本框,使用第一个")
# 输入文本
text = "自动输入测试 - " + time.strftime("%H:%M:%S")
win32api.SendMessage(edit_hwnd, win32con.WM_SETTEXT, 0, text)
print(f"✅ 已输入: {text}")
# 按回车
time.sleep(0.5)
win32api.SendMessage(edit_hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
time.sleep(0.05)
win32api.SendMessage(edit_hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
print("✅ 已按回车")
if __name__ == "__main__":
import sys
print("=" * 60)
print("Windows 窗口控制测试")
print("=" * 60)
print("\n选择测试:")
print(" 1. 自动化控制记事本(推荐)")
print(" 2. 控制当前窗口")
print()
if len(sys.argv) > 1:
choice = sys.argv[1]
else:
choice = input("请选择 (1/2): ").strip()
if choice == "1":
test_notepad()
elif choice == "2":
test_current_window()
else:
print("❌ 无效选择")