pywin32_win32gui win32con win32com win32api

目录

一 获取窗口句柄 

二 获取窗口信息

三 设置窗口尺寸与状态

四 模拟鼠标

五 模拟键盘   


一、pywin32用于python的如下接口,安装了它,以下全有了,以下也可单独安装

  • win32api:提供了常用的用户API;
  • win32gui:提供了有关用户界面图形操作的API;
  • win32con:提供了消息常量的操作API;
  • win32file:提供了文件操作的API;
  • win32com:提供COM组件操作API。

一 获取窗口句柄 

hwnd = win32gui.GetForegroundWindow()         #获取最前窗口句柄
​hwnd = win32gui.WindowFromPoint((100, 100))   #获取坐标处的窗口句柄
hwnd = win32gui.FindWindow(0, wdname)         #根据窗口标题,取得窗口句柄
hwnd = win32gui.FindWindow("Notepad", None)   #根据窗口类名,取得窗口句柄 
# 参数1 窗口类名    # 参数2 窗口标题--必须完整;如果该参数为None,则为所有窗口全匹配
# 返回值:如果函数成功,返回值为窗口句柄;如果函数失败,返回值为0  

windows = []  #自定义参数,可以是任何类型
win32gui.EnumWindows(ss, windows)  #寻找所有顶层窗口的句柄
#参数1:回调函数名称,每找到一个句柄就把句柄和windows传给a和b,并执行一次回调函数
#参数2:必须有,可以向回调函数传递一些其它参数--传给b,可以是任何类型
#枚举屏幕上的所有的顶层窗口,轮流地将这些窗口的句柄传递给回调函数的a参数。EnumWindows会一直进行下去,直到枚举完所有的顶层窗口,或者回调函数返回了FALSE.

win32gui.EnumChildWindows(hwnd1,sss,windows)  #寻找子窗口句柄
#参数1  父窗口句柄,如果此参数为Null,则此函数等效于EnumWindows;每找到一个句柄就把句柄和windows传给a和b,并执行一次回调函数
#参数2 回调函数    #参数3 自定义参数
#枚举所有子窗口,轮流地将这些窗口的句柄传递给回调函数的a参数。函数会一直进行下去,直到枚举完所有的子窗口,或者回调函数返回了FALSE
#特别注意:qt只有一个窗体,里面控件的句柄是找不到的--所以这条指令不能用在Qt绘制的窗口上

hwnd=win32gui.FindWindowEx(0,0,0,'彗星小助手')  #查找窗口或子窗口句柄
#参数1 父窗口句柄;如果是 0, 则函数以桌面窗口为父窗口;如果是 HWND_MESSAGE, 函数仅查找消息窗口
#参数2 子窗口句柄,必须是参数1的直接子窗口;子窗口以Z序排列,查找参数后面的子窗口;如果是 0, 查找从父窗口的第一个子窗口开始
#如果参数1和参数2同时是 0, 则函数查找所有的顶层窗口及消息窗口
#参数3 类名      #参数4  标题;可以是None
#返回找到的第一个窗口的句柄

menuHandle = win32gui.GetMenu(self.hwnd1)  		    #获取窗口的菜单句柄    #参数 窗口句柄
subMenuHandle = win32gui.GetSubMenu(menuHandle, 0)  #获得子菜单或下拉菜单句柄
#参数1 菜单句柄    #参数2 子菜单索引号
menuItemHandle = win32gui.GetMenuItemID(subMenuHandle, 0) # 获得菜单项中的的标志符ID,注意,分隔符是被编入索引的
#参数1 子菜单句柄--文件菜单句柄    #参数2 项目索引号

# 检测当前句柄是否存在  存在则返回  1  不存在返回 0

# 检测当前句柄是否存在  存在则返回  1  不存在返回 0
N = win32gui.IsWindowEnabled("句柄值")
S = win32gui.IsWindowVisible("句柄值")
V = win32gui.IsWindow("句柄值")

二 获取窗口信息

hid = win32gui.WindowFromPoint((100, 100)) #获取窗口句柄 
title = win32gui.GetWindowText(hid)        #获取窗口标题 
class_name = win32gui.GetClassName(hid)    #获取窗口类名 
handleDetail = win32gui.GetWindowRect(handle) # 返还窗口信息(x,y坐标,还有宽度,高度) 

三 设置窗口尺寸与状态

# 参数:句柄,窗口左边界,窗口上边界,窗口宽度,窗口高度,确定窗口是否被刷新 
win32gui.MoveWindow(hid, 100, 100, 800, 800, True)
i=win32gui.IsIconic(hwnd)    #检查窗口是否最小化     #是返回1,不是返回0
win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)   #不要最小化
win32gui.ShowWindow(hwnd, win32con.SW_HIDE)         #隐藏窗口
win32gui.ShowWindow(hwnd, win32con.SW_SHOW)         #显示窗口   
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)      #恢复窗口并且激活该窗口
win32gui.SetForegroundWindow(hwnd)                  #设置为最前窗口并且激活该窗口
# 通过句柄窗口置顶(一直置前)
win32gui.SetWindowPos('句柄值', win32con.HWND_TOPMOST, 0, 0, 0, 0,win32con.SWP_NOMOVE | win32con.SWP_NOACTIVATE | win32con.SWP_NOOWNERZORDER | win32con.SWP_SHOWWINDOW | win32con.SWP_NOSIZE)
# 通过句柄取消窗口置顶
win32gui.SetWindowPos( hwnd ,  win32con.HWND_NOTOPMOST, 0, 0, 0, 0,             
             win32con.SWP_SHOWWINDOW | win32con.SWP_NOSIZE | win32con.SWP_NOMOVE)

 # 通过窗口句柄【关闭当前句柄控件】

# 是关闭单个句柄控件,不是关闭整个程序,只能关闭输入的句柄值
win32gui.SendMessage('句柄值', win32con.WM_CLOSE)

​​​​​​​


注意:模拟鼠键操作时只在屏幕的坐标点上操作此处最前的窗口。不是操作元素控件。


四 模拟鼠标

# 设置位置
win32api.SetCursorPos((100, 100))
# 获取位置 
point = win32api.GetCursorPos() 

        鼠标点击事件  通过 win32api.mouse_event(flags, x, y, data, extra_info) 进行鼠标操作

MOUSEEVENTF_LEFTDOWN:   表明接按下鼠标左键

MOUSEEVENTF_LEFTUP:          表明松开鼠标左键

MOUSEEVENTF_RIGHTDOWN:  表明按下鼠标右键

MOUSEEVENTF_RIGHTUP:         表明松开鼠标右键

MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键

MOUSEEVENTF_MIDDLEUP:      表明松开鼠标中键

MOUSEEVENTF_WHEEL:            鼠标轮移动,数量由data给出

# 模拟鼠标在(400, 500)位置进行点击操作 
win32api.SetCursorPos(400, 500) 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)

五 模拟键盘   

        通过 keybd_event(bVk, bScan, dwFlags, dwExtraInfo) 进行监听键盘事件

bVk:        虚拟键码

bScan:    硬件扫描码,一般设置为0即可

dwFlags:函数操作的一个标志位,如果值为KEYEVENTF_EXTENDEDKEY则该键被按下,也可设置为0即可,如果值为KEYEVENTF_KEYUP则该按键被释放

dwExtraInfo:定义与击键相关的附加的32位值,一般设置为0即可

# 按下ctrl+s 
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x53, 0, 0, 0)
win32api.keybd_event(0x53, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值