如果想在Windows操作系统上使用Python去做一些自动化工作,pywin32模块常常会被用到,它方便了我们调用Windows API。

安装及使用

通过命令pip install pywin32 进行安装。安装完成后,在Lib/site-packages下,能够找到PyWin32.chm文档,通过该文档能查看每一个函数的具体用法。

实例讲解

实例1:根据窗口的标题名获取获取窗口的进程PID

import win32gui
import win32process def get_hwnd_list(window_text):
"""
获取窗口的句柄
:param window_text: str>
:return hwnd_list: list>
"""
def callback(hwnd, hwnd_list):
if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
if window_text in win32gui.GetWindowText(hwnd):
hwnd_list.append(hwnd)
return True
hwnd_list = list()
win32gui.EnumWindows(callback, hwnd_list)
return hwnd_list def get_pid_title_mapping(window_text):
"""
获取窗口的pid和title
:param window_text: str>
:return pid_title_mapping: dict>
"""
hwnd_list = get_hwnd_list(window_text)
pid_title_mapping = dict()
for hwnd in hwnd_list:
title = win32gui.GetWindowText(hwnd)
thread_id, process_id = win32process.GetWindowThreadProcessId(hwnd)
pid_title_mapping.update({process_id: title})
return pid_title_mapping if __name__ == '__main__':
print(get_pid_title_mapping('PyWin32'))

在该例中, 主要用到了win32gui.GetWindowText(hwnd)通过窗口的标题名获取窗口句柄,得到窗口句柄后通过win32process.GetWindowThreadProcessId(hwnd)获取窗口的进程PID。

程序会检测窗口名是否含有给定的关键字,以字典的形式返回含有关键字的窗口名及进程PID。当开启多个PyWin32.chm文档时,运行结果如下所示:

{14820: 'PyWin32', 14696: 'PyWin32'}

实例2:改变窗口的显示状态

import win32gui
import win32con def minimize_window(name, class_name):
"""
最小化窗口
"""
hwnd = win32gui.FindWindow(class_name, name)
win32gui.ShowWindow(hwnd, win32con.SW_SHOWMINIMIZED) if __name__ == '__main__':
minimize_window('PyWin32', 'HH Parent')

在该例中,主要用到了win32gui.FindWindow(class_name, name)获取窗口句柄,其中窗口的class_name和name参数可以通过小工具“UI Spy获得,如下图所示:

之后通过win32gui.ShowWindow(hwnd, win32con.SW_SHOWMINIMIZED)改变窗口的显示状态。本例中用到了参数win32con.SW_SHOWMINIMIZED使PyWin32.chm文档的窗口最小化,除此之外还有以下参数可供调用:win32con.SW_HIDE、win32con.SW_MINIMIZE、win32con.SW_RESTORE、win32con.SW_SHOW、win32con.SW_SHOWMAXIMIZED、win32con.SW_SHOWMINNOACTIVE、win32con.SW_SHOWNA、win32con.SW_SHOWNOACTIVATE、win32con.SW_SHOWNORMAL。

实例3:修改屏幕分辨率

import win32api

def modify_screen_resolution(width, height):
"""
修改屏幕分辨率
"""
dm = win32api.EnumDisplaySettings(None, 0)
dm.PelsWidth = width
dm.PelsHeight = height
dm.BitsPerPel = 32
dm.DisplayFixedOutput = 0
win32api.ChangeDisplaySettings(dm, 0) if __name__ == '__main__':
modify_screen_resolution(width=1920, height=1080)

在该例中,用到了win32api.EnumDisplaySettings(None, 0)win32api.ChangeDisplaySettings(dm, 0)这两个函数,它们的作用分别是获取当前显示设置以及更改显示设置。

实例4:移动窗口的位置

import win32gui
import win32con def move_window(name, class_name, x_pos, y_pos):
handle = win32gui.FindWindow(class_name, name)
win32gui.SetWindowPos(handle, win32con.SW_SHOWNORMAL, x_pos, y_pos, 0, 0, win32con.SWP_NOZORDER | win32con.SWP_NOSIZE) if __name__ == '__main__':
move_window('PyWin32', 'HH Parent', 100, 100)

该例子将PyWin32.chm文档的窗口移动到了屏幕坐标为(100,100)的位置,用到了win32gui.FindWindow(class_name, name)函数,该函数已经在实例2中介绍过了,这里不再赘述。还用到了win32gui.SetWindowPos(),用于该表窗口所在的坐标位置。

参考资料

  • https://github.com/mhammond/pywin32

最新文章

  1. 转载:css3 content 生成内容
  2. 开发Adobe AIR移动应用程序的考虑事项
  3. AutoMapper.EF6
  4. 学习OpenCV——行人检测&人脸检测(总算运行出来了)
  5. Openstack的keystone的user-role-list命令的使用
  6. Delphi 调用 Rest 服务的一些
  7. 用CSS样式截取字符串,多的用省略号表示
  8. 7.Knockout.Js(Mapping插件)
  9. python的资料
  10. 【UVA1416】(LA4080) Warfare And Logistics (单源最短路)
  11. POJ 1426 Find The Multiple(数论——中国同余定理)
  12. 算法:数组中和为s的两个数字
  13. Java第4次实训作业
  14. 深入理解Java中的final关键字(转)
  15. 软工网络15团队作业8——Beta阶段敏捷冲刺(Day2)
  16. pkgadd 软件安装二种方法
  17. new/malloc的差别
  18. vs2010中配置OpenGL以及针对64位系统所遇问题的解决办法
  19. 一、python简单爬取静态网页
  20. 安卓app连接CC2541-手机休眠后唤醒,通信不再成功

热门文章

  1. jvm源码解读--08 创建oop对象,将static静态变量放置在oop的96 offset处
  2. Python - 基础数据类型 dict 字典
  3. div 模拟alert弹出框
  4. 网络编程之TCP客户端开发和TCP服务端开发
  5. MySQL 执行优化查询
  6. CentOS文件目录类语法
  7. Blazor 模板化组件开发指南
  8. Redis-缓存穿透/击穿/雪崩
  9. Shell-10-标准输入输出错误
  10. 关于knn算法的总结思考