from os import system
from os.path import abspath, dirname
from time import sleep
from random import randint
from win32gui import SetForegroundWindow, GetWindowRect
from win32api import MAKELONG, SendMessage
from win32con import WM_LBUTTONUP, MK_LBUTTON, WM_LBUTTONDOWN
from pyautogui import position, click, moveTo
from modules.ModuleHandleSet import HandleSet
class DoClick:
def __init__(self, pos, click_deviation, handle_num=0):
super(DoClick, self).__init__()
self.click_deviation = click_deviation
self.handle_num = handle_num
self.pos = pos
def windows_click(self):
"""
点击目标位置,可后台点击(仅兼容部分窗体程序)
"""
if self.pos is not None:
pos = self.pos
handle_num = self.handle_num
click_deviation = int(self.click_deviation)
px = randint(-click_deviation, click_deviation)
py = randint(-click_deviation, click_deviation)
cx = int(px + pos[0])
cy = int(py + pos[1])
long_position = MAKELONG(cx, cy)
SendMessage(handle_num, WM_LBUTTONDOWN, MK_LBUTTON, long_position)
sleep(0.05)
SendMessage(handle_num, WM_LBUTTONUP, MK_LBUTTON, long_position)
print(f"点击坐标: [ {cx} , {cy} ] 窗口名称: [ {HandleSet.get_handle_title(handle_num)} ]")
return True
def adb_click(self):
"""数据线连手机点击"""
if self.pos is not None:
pos = self.pos
click_deviation = int(self.click_deviation)
px = randint(-click_deviation, click_deviation)
py = randint(-click_deviation, click_deviation)
cx = int(px + pos[0])
cy = int(py + pos[1])
command = abspath(dirname(__file__)) + r'\adb.exe shell input tap {0} {1}'.format(cx, cy)
system(command)
print(f"点击坐标: [ {cx} , {cy} ]")
return True
def windows_click_bk(self):
"""
点击目标位置,只能后台点击(兼容所有窗体程序)
"""
pos = self.pos
handle_num = self.handle_num
click_deviation = int(self.click_deviation)
x1, y1, x2, y2 = GetWindowRect(handle_num)
px = randint(-click_deviation, click_deviation)
py = randint(-click_deviation, click_deviation)
cx = int(px + pos[0])
cy = int(py + pos[1])
jx = cx + x1
jy = cy + y1
SetForegroundWindow(handle_num)
sleep(0.2)
now_pos = position()
moveTo(jx, jy)
click(jx, jy)
moveTo(now_pos[0], now_pos[1])
print(f"点击坐标: [ {cx} , {cy} ] 窗口名称: [ {HandleSet.get_handle_title(handle_num)} ]")
return True