赞
踩
import win32gui
hid = win32gui.WindowFromPoint((100, 100))
title = win32gui.GetWindowText(hid)
class_name = win32gui.GetClassName(hid)
方法1:通过标题查找,仅返回一个顶层窗口的句柄,不支持模糊查询
# 参数:类名,窗口标题,未找到返回0
hid = win32gui.FindWindow(None, "照片")
方法2:遍历查找到所有可能符合标题的句柄,支持模糊查找
import win32gui def find_hid_by_title(title): hid_title_dict = {} def get_all_hid_title(hid, arg): # IsWindow:如果窗口句柄标识了一个已存在的窗口,返回值为非零;如果窗口句柄未标识一个已存在窗口,返回值为零 # IsWindowEnabled:若窗口允许接受键盘或鼠标输入,则返回非0值,若窗口不允许接受键盘或鼠标输入,则返回值为0。 # IsWindowVisible:该函数获得给定窗口的可视状态 if win32gui.IsWindow(hid) and win32gui.IsWindowEnabled(hid) and win32gui.IsWindowVisible(hid): hid_title_dict[hid] = win32gui.GetWindowText(hid) # 枚举屏幕上所有顶层窗口,参数:回调函数,传递给回调函数的第二个参数 win32gui.EnumWindows(get_all_hid_title, 0) # 找到含title的窗口 match_res = {} for k, v in hid_title_dict.items(): if str(title) in v: match_res[k] = v return match_res if __name__ == "__main__": res = find_hid_by_title("照片") if len(res) == 0: print("未找到句柄") else: for hid, title in res.items(): print(f"hid: {hid}, title: {title}")
# 获取相对屏幕左上角的位置,得到窗口左上角和右下角坐标
left, top, right, bottom = win32gui.GetWindowRect(hid)
hid = 1509318
# 参数:句柄,窗口左边界,窗口上边界,窗口宽度,窗口高度,确定窗口是否被刷新
win32gui.MoveWindow(hid, 100, 100, 800, 800, True)
方法一:枚举
import win32gui def child_handler(cid, child_info_list): rect = win32gui.GetWindowRect(cid) class_name = win32gui.GetClassName(cid) child_info_list.append([cid, class_name, rect]) def get_child_info(hid): child_info_list = [] win32gui.EnumChildWindows(hid, child_handler, child_info_list) return child_info_list if __name__ == "__main__": hid = 1509318 print(get_child_info(hid))
方法二:递归查询
import win32gui def find_all_child_hid(hid): res = [] def find_child_hid(hid, res, child_hid=None, class_name=None, title=None): # 参数:父窗口句柄,子窗口句柄,子类名,子类标题 c_id = win32gui.FindWindowEx(hid, child_hid, class_name, title) if c_id != 0: res.append(c_id) find_child_hid(hid, res, child_hid=c_id) find_child_hid(hid, res) return res def get_all_child_info(hid): cid_list = find_all_child_hid(hid) res = [] for item in cid_list: rect = win32gui.GetWindowRect(item) class_name = win32gui.GetClassName(item) res.append([item, class_name, rect]) return res if __name__ == "__main__": hid = 1509318 print(get_all_child_info(hid))
hid = 2556718
# 将创建指定窗口的线程设置到前台,并且激活该窗口
win32gui.SetForegroundWindow(hid)
import win32api
# 设置位置
win32api.SetCursorPos((100, 100))
# 获取位置
point = win32api.GetCursorPos()
print(point)
参数
win32api.mouse_event(flags, x, y, data, extra_info)
"""
flags:
MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。
MOUSEEVENTF_LEFTUP:表明松开鼠标左键。
MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。
MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。
MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。
MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。
MOUSEEVENTF_WHEEL:鼠标轮移动,数量由data给出。
"""
左击
import win32api, win32con
def left_click(point):
win32api.SetCursorPos(point)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)
if __name__ == "__main__":
point = (734, 737)
left_click(point)
pynput绑定鼠标事件
import win32gui from pynput import mouse from multiprocessing import Process class GetHid: def __init__(self): self.res = {} def get_some(self, x, y, button, press): hid = win32gui.WindowFromPoint((x, y)) title = win32gui.GetWindowText(hid) class_name = win32gui.GetClassName(hid) rect = win32gui.GetWindowRect(hid) self.res.update({ "hid": hid, "relx": x - rect[0], "rely": y - rect[1], "rect": rect, "class_name": class_name, "title": title, }) print(self.res) def _get_hid(self): while True: with mouse.Listener(on_click=self.get_some) as lis: lis.join() def main(self): self._get_hid() if __name__ == "__main__": p1 = Process(target=GetHid().main) p1.start() p1.join()
import win32api import win32con import win32gui def left_click(rx, ry, hwnd): # 模拟鼠标指针 传送到窗口相对坐标 long_position = win32api.MAKELONG(rx, ry) # 模拟鼠标左击 win32api.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position) win32api.SendMessage(hwnd, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, long_position) if __name__ == "__main__": # 找到句柄和相对点击位置 hwnd = 66518 cx = 238 cy = 23 left_click(cx, cy, hwnd)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。