-
Notifications
You must be signed in to change notification settings - Fork 0
/
AutoSendMessage.py
163 lines (144 loc) · 4.75 KB
/
AutoSendMessage.py
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# -*- coding:UTF-8 -*-
import datetime
import re
import time
import pyautogui
import psutil
import win32clipboard as clip
import win32con
import win32gui
import win32api
# 不导入pyautogui可能导致鼠标设置定位出错
def TIM_login():
"""
判断TIM是否登录,没登录则登录
:return: 返回一个是否登录bool值
"""
pl = psutil.pids()
flag = False
for pid in pl:
if psutil.Process(pid).name() == 'TIM.exe':
flag = True
return flag
def message_get():
"""
获得message.txt里的内容
:return: 返回message.txt里的内容
"""
with open('./message.txt', encoding='UTF-8') as f1:
message = f1.readlines()
for msg in message:
return msg
def people_get():
"""
获得people.txt里的内容
:return: 返回people.txt的目标的数组
"""
with open('./people.txt', encoding='UTF-8') as f2:
people = f2.readlines()
return people
def copy(text):
"""
将消息传入剪贴板
:param text: 消息的内容
:return: 无
"""
clip.OpenClipboard()
clip.EmptyClipboard()
clip.SetClipboardData(win32con.CF_UNICODETEXT, text)
clip.CloseClipboard()
def find_window(title):
"""
通过正则表达式对窗口标题进行模糊匹配
:param title: 需要模糊匹配的窗口标题
:return: 返回匹配到的窗口句柄
"""
# 正则表达式
pattern = f".*{title}.*"
windows = []
# 回调函数
def callback(hwnd, windows):
# 根据窗口句柄获取窗口名字
name = win32gui.GetWindowText(hwnd)
if re.match(pattern, name):
windows.append(hwnd)
return True
win32gui.EnumWindows(callback, windows)
return windows[0]
def TIM_send(title, p, num=1):
"""
发送消息
:param title: 需要模糊匹配的窗口标题
:param p: 需要发送消息的目标
:param num: 发送次数
:return: 无
"""
try:
# 获取窗口句柄
handle = find_window(title)
# 打开窗口
win32gui.SetForegroundWindow(handle)
# 窗口最大化
win32gui.ShowWindow(handle, win32con.SW_MAXIMIZE)
time.sleep(1.5)
# 鼠标位置设定
win32api.SetCursorPos((130, 60))
# 点击一次鼠标
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)
# ctrl+V
time.sleep(1)
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x56, 0, 0, 0)
win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
# enter
time.sleep(1)
win32api.keybd_event(0x0D, 0, 0, 0)
win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0)
# 文案
p = p.strip('\n')
msg = f"状态: 脚本运行中\n内容: {message_get()}\n对象: {p}\n时间: {datetime.datetime.now()}"
# 将消息文本复制到剪贴板
copy(msg)
for i in range(num):
# 鼠标位置设定
win32api.SetCursorPos((1000, 940))
# 点击一次鼠标
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)
# ctrl+V
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x56, 0, 0, 0)
win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
# enter
time.sleep(1)
win32api.keybd_event(0x0D, 0, 0, 0)
win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(0.5)
print("[*]目标", p, "发送成功")
except Exception as e:
print("[!]窗口句柄获取失败,请检查窗口名字是否正确")
def main():
if TIM_login():
print("[*]检测到TIM已登录")
# title是窗口标题
title = people_get()[0]
for p in people_get():
p = p.strip('\n')
print("[*]当前发送目标", p)
copy(p)
TIM_send(title, p, num=2)
title = p
# 最小化窗口
handle = find_window(p)
win32gui.SetForegroundWindow(handle)
win32gui.ShowWindow(handle, win32con.SW_MINIMIZE)
# 提示完成
win32api.MessageBox(0, "脚本结束", "提示", win32con.MB_OK)
else:
print("[!]未检测到TIM.exe,请重试")
pass
if __name__ == '__main__':
main()