如果想在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模块的更多相关文章

  1. python之platform模块

    python之platform模块 ^_^第三个模块从天而降喽!! 函数列表 platform.system() 获取操作系统类型,windows.linux等 platform.platform() ...

  2. python 中time模块使用

    在开始之前,首先要说明这几点: 1.在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主 ...

  3. python import media模块

    安装PyGraphics包 (python import media模块)有一段代码要import media,打开python自带的IDLE,输入: >>>import media ...

  4. 【Python之路】第六篇--Python基础之模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  5. Python中time模块详解

    Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...

  6. Python中time模块详解(转)

    在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: ...

  7. 基于Python的datetime模块和time模块源码阅读分析

    目录 1 前言  2 datetime.pyi源码分步解析 2.1 头部定义源码分析 2.2 tzinfo类源码分析 2.3 date类源码分析 2.4 time类源码分析 2.5 timedelta ...

  8. Python学习---重点模块的学习【all】

    time     [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...

  9. python的time模块使用

    在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: ...

随机推荐

  1. TCP通信简单梳理

    一.什么是TCP协议 TCP协议是一种面向连接的可靠的通信协议,最重要的两个特点:连接.可靠. 二.TCP是如何进行通信的 TCP通过三次握手建立连接后客户端服务端的内核都分别开辟资源,这时候开始进行 ...

  2. jvm源码解读--13 gc_root中的栈中oop的mark 和copy 过程分析

    粘贴源码 package com.test; import java.util.Random; public class Test { static int number=12; private in ...

  3. 卷积的等变性(equivariant) / 不变性(invariant)

    不变性:输入x发生变换,但是F之后的输出不变 \(F(x)=F [\)transform\((x)]\) 池化:近似不变性,当图像发生微小变化,最大池化的输出不变,还是一个池化范围内的max 等变性: ...

  4. C++面向对象 1(类-封装)

    1 //类和对象 2 //C++ 面向对象 三大特性 : 封装 继承 多态 3 4 //设计一个圆类,求圆的周长 5 //圆周长 = 2*PI * 半径 6 7 #include <iostre ...

  5. SpringBoot-技术专区-用正确的姿势如何用外置tomcat配置及运行(Tomcat优化分析)

    前提概要 在特别特殊的时候,我们可能需要外置tomcat去运行程序,例如alitomcat等特殊场景,方便我们去定时化开发项目或者其他特殊场景. 外置tomcat执行 pom.xml文件首先更改打包方 ...

  6. javaScript学习关于常用注册监听和对象的创建

    JS 中的自定义对象(扩展内容)                     Object 形式的自定义对象                       对象的定义:                    ...

  7. mapboxgl 互联网地图纠偏插件(三)

    先说结论,结论当然是:大功告成,喜大普奔.看效果图: 好了,接下来说一下过程 先回顾一下这个系列的第一篇和第二篇 第一篇是直接改的 mapboxgl 源码,在源码里面对瓦片的位置进行纠偏,遇到的问题是 ...

  8. make CLI Comfortable When Working in Multiple Directoies

    alias alias is command-line counterpart of hotstring of AutoHotkey, for example: alias vboat='vi ~/d ...

  9. TotalCommander的两款目录插件

    CatalogMaker 与 DiskDir Extended 是两个用于生成文件夹目录的totalCmd插件. 将指定目录下所有文件.文件夹以指定格式存储在一个文本文件中,可作为EverCD+的轻量 ...

  10. Redis实现分布式锁那件事

    今天我们来聊一聊分布式锁的那些事. 相信大家对锁已经不陌生了,我们在多线程环境中,如果需要对同一个资源进行操作,为了避免数据不一致,我们需要在操作共享资源之前进行加锁操作.在计算机科学中,锁(lock ...