- 依赖包
import win32gui, win32con, win32api,win32ui
from win32clipboard import *
import cv2
- 获得焦点
win32api.SendMessage(hwnd, win32con.WM_SETFOCUS, 0, 0)
- 后台鼠标
def click_point(x, y, hwnd=None):
get_focus()
win32api.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, 0, ((y) << 16 | (x)));
win32api.SendMessage(hwnd, win32con.WM_LBUTTONUP, 0, ((y) << 16 | (x)));
- 后台按键
def send_enter(hwnd=None):
win32api.SendMessage(hwnd, win32con.WM_KEYDOWN, 13, 0)
win32api.SendMessage(hwnd, win32con.WM_KEYUP, 13, 0)
- 后台输入
def send_str(text, hwnd=None):
astrToint = [ord(c) for c in text]
for item in astrToint:
win32api.PostMessage(hwnd, win32con.WM_CHAR, item, 0)
- 设置剪切板
def set_cli_text(text):
OpenClipboard()
SetClipboardData(win32con.CF_UNICODETEXT , text)
CloseClipboard()
- 粘贴
def wm_paste(hwnd):
win32api.SendMessage(hwnd, win32con.WM_CLEAR , 0, 0)
win32api.SendMessage(hwnd, win32con.WM_PASTE, 0, 0)
- 修改combobox下拉框的值 & edit写入数据9
- 后台截图
import numpy as np
from PIL import Image
from functools import reduce
def window_capture(
hwnd,
scaling_factor=1.25,
point_rct=None,
):
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
rctA = win32gui.GetWindowRect(hwnd)
w = rctA[2] - rctA[0]
h = rctA[3] - rctA[1]
w = int(w * scaling_factor)
h = int(h * scaling_factor)
saveBitMap.CreateCompatibleBitmap(mfcDC, point_rct[2], point_rct[3])
saveDC.SelectObject(saveBitMap)
saveDC.BitBlt(
(0, 0),
(point_rct[2], point_rct[3]),
mfcDC,
(point_rct[0], point_rct[1]),
win32con.SRCCOPY,
)
signedIntsArray = saveBitMap.GetBitmapBits(True)
img = np.frombuffer(signedIntsArray, dtype="uint8")
img.shape = (point_rct[3], point_rct[2], 4)
win32gui.DeleteObject(saveBitMap.GetHandle())
mfcDC.DeleteDC()
saveDC.DeleteDC()
return cv2.cvtColor(img, cv2.COLOR_RGBA2RGB)
def phash(img):
img = img.resize((8, 8), Image.ANTIALIAS).convert("L")
avg = reduce(lambda x, y: x + y, img.getdata()) / 64.0
return reduce(
lambda x, y: x | (y[1] << y[0]),
enumerate(map(lambda i: 0 if i < avg else 1, img.getdata())),
0,
)
def hamming_distance(a, b):
return bin(a ^ b).count("1")
def is_imgs_similar(img1, img2):
dif = hamming_distance(phash(img1), phash(img2))
print(dif)
if dif <= 5:
return True
else:
return False
hwnd = 197632
point_rct = (2194, 210, 135, 21)
mat = window_capture(hwnd, 1.25, point_rct)
pil_image = Image.fromarray(mat)
x_image = pil_image.crop((0, 0, 67, 21))
y_image = pil_image.crop((67, 0, 133, 20))
is_sim = is_imgs_similar(x_image, y_image)
print(is_sim)
print(x, y)