首页 > 其他分享 >pywin32、win32api、win32gui、win32com、win32con 都是啥?

pywin32、win32api、win32gui、win32com、win32con 都是啥?

时间:2024-10-25 15:36:08浏览次数:1  
标签:窗口 句柄 pywin32 win32com win32gui win32con 参数 win32api

pywin32、win32api、win32gui、win32com、win32con 名称非常类似,特别容易混淆,今天就用600字给大家区分一下

 

文章目录

 

pywin32

pywin32 主要的作用是供 Python开发者快速调用 Windows API的一个模块库。该模块的另一个作用是是通过Python进行COM编程。

落地场景:
如果你想在Windows操作系统用Python实现自动化工作,pywin32模块经常用到。

win32gui

win32gui 在安装 pywin32 之后就可以使用,这个模块定义了 Windows 下关于图形操作的API,FindWindow和 FindWindowEx 函数都可以使用。
该模块可以单独安装。

win32con

同上述模块基本一致,也是与 pywin32 配合使用的模块,这个模块内定义了Windows API内的宏。

win32api

win32api 也是安装 pywin32 之后就会配备的模块,Win32 API 即为Microsoft 32位平台的应用程序编程接口,接口可以在下述参考,除Python外,其它语言也可以对接。

使用该模块会经常用到一个手册:http://www.yfvb.com/help/win32sdk/webhelplefth.htm

win32com

Python 操作 COM 组件的库(COM是Component Object Model (组件对象模型)的缩写)

其实到这里你会发现 pywin32 是底座,其它的都属于搭配模块。

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

其它的模块还有,可以自行学习即可

在这里插入图片描述

 

2024-10-25 15:27:22【出处】:https://dream.blog.csdn.net/article/details/123380839

=======================================================================================

pywin32_win32gui win32con win32com win32api

目录

一 获取窗口句柄 

二 获取窗口信息

三 设置窗口尺寸与状态

四 模拟鼠标

五 模拟键盘   


 

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

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

一 获取窗口句柄 

  1. hwnd = win32gui.GetForegroundWindow() #获取最前窗口句柄
  2. ​hwnd = win32gui.WindowFromPoint((100, 100)) #获取坐标处的窗口句柄
  3. hwnd = win32gui.FindWindow(0, wdname) #根据窗口标题,取得窗口句柄
  4. hwnd = win32gui.FindWindow("Notepad", None) #根据窗口类名,取得窗口句柄
  5. # 参数1 窗口类名 # 参数2 窗口标题--必须完整;如果该参数为None,则为所有窗口全匹配
  6. # 返回值:如果函数成功,返回值为窗口句柄;如果函数失败,返回值为0
  7.  
  8. windows = [] #自定义参数,可以是任何类型
  9. win32gui.EnumWindows(ss, windows) #寻找所有顶层窗口的句柄
  10. #参数1:回调函数名称,每找到一个句柄就把句柄和windows传给a和b,并执行一次回调函数
  11. #参数2:必须有,可以向回调函数传递一些其它参数--传给b,可以是任何类型
  12. #枚举屏幕上的所有的顶层窗口,轮流地将这些窗口的句柄传递给回调函数的a参数。EnumWindows会一直进行下去,直到枚举完所有的顶层窗口,或者回调函数返回了FALSE.
  13. win32gui.EnumChildWindows(hwnd1,sss,windows) #寻找子窗口句柄
  14. #参数1 父窗口句柄,如果此参数为Null,则此函数等效于EnumWindows;每找到一个句柄就把句柄和windows传给a和b,并执行一次回调函数
  15. #参数2 回调函数 #参数3 自定义参数
  16. #枚举所有子窗口,轮流地将这些窗口的句柄传递给回调函数的a参数。函数会一直进行下去,直到枚举完所有的子窗口,或者回调函数返回了FALSE
  17. #特别注意:qt只有一个窗体,里面控件的句柄是找不到的--所以这条指令不能用在Qt绘制的窗口上
  18.  
  19. hwnd=win32gui.FindWindowEx(0,0,0,'彗星小助手') #查找窗口或子窗口句柄
  20. #参数1 父窗口句柄;如果是 0, 则函数以桌面窗口为父窗口;如果是 HWND_MESSAGE, 函数仅查找消息窗口
  21. #参数2 子窗口句柄,必须是参数1的直接子窗口;子窗口以Z序排列,查找参数后面的子窗口;如果是 0, 查找从父窗口的第一个子窗口开始
  22. #如果参数1和参数2同时是 0, 则函数查找所有的顶层窗口及消息窗口
  23. #参数3 类名 #参数4 标题;可以是None
  24. #返回找到的第一个窗口的句柄
  25. menuHandle = win32gui.GetMenu(self.hwnd1) #获取窗口的菜单句柄 #参数 窗口句柄
  26. subMenuHandle = win32gui.GetSubMenu(menuHandle, 0) #获得子菜单或下拉菜单句柄
  27. #参数1 菜单句柄 #参数2 子菜单索引号
  28. menuItemHandle = win32gui.GetMenuItemID(subMenuHandle, 0) # 获得菜单项中的的标志符ID,注意,分隔符是被编入索引的
  29. #参数1 子菜单句柄--文件菜单句柄 #参数2 项目索引号
 

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

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

 

二 获取窗口信息

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

 

三 设置窗口尺寸与状态

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

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

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

​​​​​​​


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


四 模拟鼠标

  1.  # 设置位置
  2.  win32api.SetCursorPos((100, 100))
  3.  # 获取位置
  4.  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给出

  1.  # 模拟鼠标在(400, 500)位置进行点击操作
  2.  win32api.SetCursorPos(400, 500)
  3.  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)
  4. 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即可

  1. # 按下ctrl+s
  2. win32api.keybd_event(0x11, 0, 0, 0)
  3. win32api.keybd_event(0x53, 0, 0, 0)
  4. win32api.keybd_event(0x53, 0, win32con.KEYEVENTF_KEYUP, 0)
  5. win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)

 

 

 

2024-10-25 15:28:26【出处】:https://blog.csdn.net/cangxiao/article/details/128700263

=======================================================================================

标签:窗口,句柄,pywin32,win32com,win32gui,win32con,参数,win32api
From: https://www.cnblogs.com/mq0036/p/18502639

相关文章

  • python使用win32gui、win32con窗口函数功能及参数意义
    使用python设置窗口显示、最大化、最小化、隐藏的时候,需要win32gui.ShowWindow(hwnd,win32con.SW_HIDE),那么对于的参数如下:ShowWindow函数的参数有:1.hWnd:窗口句柄,用于标识要操作的窗口;2.nCmdShow:指定窗口如何显示,可以是以下值:SW_HIDE:隐藏窗口并**其他窗口。nCmdShow=0。SW_......
  • Excel的背面(1) — Pywin32调用异常、MSO与KET之争
    在上一篇博文中我提到了Excel批注有关的问题,这里我并不打算马上更新Excel歪门邪道,毕竟我可供更新的内容实在是太少了,这也对应了我过去失败的29年,恍恍惚惚出生,恍恍惚惚工作,恍恍惚惚之间步入低谷,从来就没有哪一刻想过要成为成年人,最后不过是有着成年人躯壳的小孩。Excel相关的内容因......
  • PyQt / PySide + Pywin32 + ctypes 自定义标题栏窗口 + 完全还原 Windows 原生窗口边
    项目地址:GitHub-github201014/PyQt-NativeWindow:AclassofwindowincludenativeEvent,usePySideorPyQtandPywin32andctypesAclassofwindowincludenativeEvent,usePySideorPyQtandPywin32andctypes-github201014/PyQt-NativeWindowhttps://githu......
  • Python pywin32(win32com)复制和删除幻灯片页面
    #自动添加幻灯片defduplicate_slides(_path_template,_path_dest,_slide_nums,_index=SLIDE_START_PAGE):"""输入参数::param_path_template:PPT模板文件全路径:param_index:PPT母版业起始索引。索引从1开始。:param_slide_nums:将要复制的PP......
  • PyQt5 / PySide 2 + Pywin32 自定义标题栏窗口 + 还原 Windows 原生窗口边框特效(2)
    前言:已修复上一篇文章中提到的Bug,增加状态切换动画:PyQt5/PySide2+Pywin32自定义标题栏窗口+还原Windows原生窗口边框特效-CSDN博客https://blog.csdn.net/2402_84665876/article/details/141487635?spm=1001.2014.3001.5501仍然存在的问题:打开窗口时窗口标题栏......
  • PyQt5 / PySide 2 + Pywin32 自定义标题栏窗口 + 还原 Windows 原生窗口边框特效
    Bug:当窗口不处于顶层时,如果点击窗体试图将其置于顶层,窗体自带的白边框会突然显示,最长两秒。完整性:尚未添加窗口状态的过渡动画和淡入、淡出动画。其他问题:由于Qt官方在版本6去掉了QtWin,目前暂未找到PyQt6/PySide6的解决方案。准备工作:在同目录下放四张照片:m......
  • 使用 YOLOv5 和 PyWin32 的游戏中鼠标移动和点击无法正常工作
    我正在开发一个AI项目,使用YOLOv5模型来检测和射击Aimlabs游戏中的物体。该代码在游戏暂停时工作正常,但在游戏运行时无法准确移动鼠标,您知道如何解决此问题吗?importcv2importtorchimportnumpyasnpimportmssfromPILimportImageimportwin32apiimportwin32c......
  • python中使用win32com实现Excel转CSV
    Excel转csv可以使用pandas的to_excel、to_csv实现转换,但是当Excel文件较大时,pandas耗时会较多,可以考虑使用win32com实现importwin32com.clientxl=win32com.client.Dispatch("Excel.Application")xl.DisplayAlerts=Falsexl.Visible=Falsexl.Workbooks.Open(Filename=......
  • pywin32:批量将doc文件转为docx
    学习自:python批量把doc文件转换成docx_python批量将doc转docx-CSDN博客目的:将某个目录下(包括子目录)中的所有doc转为docximportosimportdocximportwin32com.clientaswin32url='D:\规范文档'word=win32.Dispatch('Word.Application')forroot,dir2,filesinos.walk(u......
  • python用win32com.client驱动excel时如何控制是否更新链接?
    python中Pywin32库的win32com.clien模块在驱动Excel时有诸多好处:1、可以决定是否显式地打开Excel应用,调试的时候所见即所得;2、可以用近乎一样的VBA语法,几乎能实现VBA可以实现的所有功能;3、它甚至也支持直接调用Excel中已经写好的宏文件。那它有什么缺点呢?我觉得最主要......