学习python窗口句柄、后台鼠标点击等知识笔记

  1. 获取句柄:(ParentName为对应窗口的完整名称(字符串),实在确定不了可以用按键抓抓的句柄抓取获得)
parent = win32gui.FindWindow(0,ParentName)
  1. 获取子句柄:(ChildClass为子句柄的类名(字符串))
child= win32gui.FindWindowEx(parent,None,ChildClass, None)
  1. 鼠标点击(可后台):(hwnd为需要点击的窗口句柄,cx、cy为点击位置在该窗口的相对坐标
def doClick(cx,cy):
        long_position = win32api.MAKELONG(cx, cy)#模拟鼠标指针 传送到指定坐标
        win32api.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position)#模拟鼠标按下
        win32api.SendMessage(hwnd, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, long_position)#模拟鼠标弹起

  1. 不知道为什么,我用第三方工具抓取的坐标一直有问题,就写了一段计算相对坐标的代码。当时主要跳的坑有计算的时候用的是我要找的那个窗口的父句柄,以至于坐标一直有偏差,后来意识到子句柄才是要找的,修改了一下,坐标就正确了。
# -*- coding:utf-8 -*-

import win32gui,win32api
import time

wdname = u'父句柄名称'

hwnd = win32gui.FindWindow(0, wdname) # 父句柄
hwnd1 = win32gui.FindWindowEx(hwnd, None,'类名称', None) # 目标子句柄
windowRec = win32gui.GetWindowRect(hwnd1) # 目标子句柄窗口的坐标

while True:
    tempt = win32api.GetCursorPos() # 记录鼠标所处位置的坐标
    x = tempt[0]-windowRec[0] # 计算相对x坐标
    y = tempt[1]-windowRec[1] # 计算相对y坐标
    print(x,y)
    time.sleep(0.5) # 每0.5s输出一次

主要的问题是一开始没有搞懂父句柄和子句柄的概念,以及一开始把前台鼠标点击和后台鼠标点击混为一谈了,两者有很大的不同。前台是模拟鼠标点击这个动作,而后台是发送“鼠标点击”这个信息。

参考:
python win32api win32gui win32con 窗口句柄 发送消息 常用方法 键盘输入
取色,大漠识别和后台点击
python和pywin32实现窗口查找、遍历和点击
[Python] 用python做一个游戏辅助脚本,完整思路
python中的句柄操作
通过pywin32库来上传文件

你可能感兴趣的:(python)