Python之win32模块
如果想在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
Python之win32模块的更多相关文章
- python之platform模块
python之platform模块 ^_^第三个模块从天而降喽!! 函数列表 platform.system() 获取操作系统类型,windows.linux等 platform.platform() ...
- python 中time模块使用
在开始之前,首先要说明这几点: 1.在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主 ...
- python import media模块
安装PyGraphics包 (python import media模块)有一段代码要import media,打开python自带的IDLE,输入: >>>import media ...
- 【Python之路】第六篇--Python基础之模块
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- Python中time模块详解
Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...
- Python中time模块详解(转)
在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: ...
- 基于Python的datetime模块和time模块源码阅读分析
目录 1 前言 2 datetime.pyi源码分步解析 2.1 头部定义源码分析 2.2 tzinfo类源码分析 2.3 date类源码分析 2.4 time类源码分析 2.5 timedelta ...
- Python学习---重点模块的学习【all】
time [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...
- python的time模块使用
在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: ...
随机推荐
- 学会这十招,轻松搜索github优质项目
大家好,我是青空. 今天我想给大家分享一下使用 GitHub 的一些心得体会.之前我是在分享 GitHub上的一些开源项目,通过这段时间的收集工作,我积累了一些相关的经验在这里分享给大家. 我做了一个 ...
- 使用C#winform编写渗透测试工具--敏感目录扫描
使用C#winform编写渗透测试工具--敏感目录扫描 由于之前在做渗透测试的时候,发现使用的工具较多,切换起来较麻烦,便萌生了开发一个包含各种渗透测试工具的小程序,包括敏感目录扫描.端口查询.子域名 ...
- XSS靶机
第一关 localhost:8083/xss/level1.php?name=test<script>alert(1)</script> 第二关 源码 文本框输入js代码,查看 ...
- Typora PicGo Gitee博客写作好搭档
利用Gitee仓库存放图片 1.首先在Gitee上创建一个公开的仓库,我这里创建了一个名叫resources的仓库: 2.在Gitee中获取私人令牌(个人设置界面中): 安装配置PicGo 1.下载自 ...
- mysql zip 安装
第一步下载mysql.zip https://dev.mysql.com/downloads/mysql/5.7.html#downloads 第二步:解压文件后在其目录下, 新建 my.ini ...
- 记录21.07.24 —— Vue的组件与路由
VUE组件 作用:复用性 创建组件的三种方式 第一种:使用extends搭配component方法 第二种:直接使用component方法 只有用vue声明且命名的才称之为创建组件 注意:templa ...
- IIS短文件名漏洞原理与挖掘思路
首先来几个网址先了解一下 https://www.jb51.net/article/166405.htm https://www.freebuf.com/articles/web/172561.htm ...
- 原生ajax练习-post&xml
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 浙大二院姚克团队发现新的NLRP3炎症小体抑制剂,有望用于治疗炎症疾病
期刊:Clinical and Translational Medicine 发表时间:2021年7月19日 影响因子:11.492 角膜炎是一种眼科常见疾病,也是我国主要致盲眼病之一,其特征是炎性细 ...
- 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...