Python之win32模块

摘要:
如果您想使用Python在Windows操作系统上执行一些自动化工作,通常会使用pywin32模块,这有助于我们调用Windows API。安装并使用命令pipinstallpywin32。打开多个PyWin32.chm文档时,运行结果如下:{14820:‘PyWin32’,14696:‘PyWin32‘}实例2:更改窗口importwin32gui importwin32undefinize_window:“”最小化窗口“”hwnd=win32gui的显示状态。FindWindowwin32gui。ShowWindowif__name__=='__main__':minimize_Window在本例中,主要使用win32gui。FindWindow获取窗口句柄,其中窗口的类_可以通过小工具“UISpy”获取名称和名称参数,如下图所示:然后通过win32gui更改窗口的显示状态。

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

安装及使用

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

Python之win32模块第1张

实例讲解

实例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获得,如下图所示:

Python之win32模块第2张

之后通过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模块》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇c++ 火柴棒等式Android启动页面实现版本检查更新下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python学习——大文件分割与合并

在平常的生活中,我们会遇到下面这样的情况: 你下载了一个比较大型的游戏(假设有10G),现在想跟你的同学一起玩,你需要把这个游戏拷贝给他。 然后现在有一个问题是文件太大(我们不考虑你有移动硬盘什么的情况),假设现在只有一个2G或4G的优盘,该怎么办呢? 有很多方法,例如winrar压缩的时候分成很多小卷,这里不累述。 在学习python之后,我们自己就可以...

python 删除多个同一后缀名文件(基于python 3.X)

import osdef remove(): filearray = [] address_Excel="E:\totally\FinancePDF" f_list = os.listdir(address_Excel)for fileNAME in f_list:# os.path.splitext():分离文件名与扩展名 if os.path.s...

[读书笔记] Python 数据分析 (十一)经济和金融数据应用

resample: 重采样函数,可以按照时间来提高或者降低采样频率,fill_method可以使用不同的填充方式。 pandas.data_range 的freq参数枚举: Alias Description B business day frequency C custom business day frequency D calend...

基于Python的Web应用开发实战——3 Web表单

第2章中介绍的 请求对象 包含客户端发出的所有请求信息。 其中, request.form 能获取 POST请求 中提交的表单数据。 尽管Flask的请求对象提供的信息足够用于处理Web表单,但有些任务很单调,而且要重复操作。 比如,生成表单的HTML代码和验证提交的表单数据。 Flask-WTF(https://flask-wtf.readthedocs...

Linux系统下-关于Python和pip的那些报错

   1、在安装过程中出现如下错误: ImportError: No module named setuptools [root@localhost MySQL-python-1.2.5]# python setup.py install Traceback (most recent call last): File "setup.py", line 7,...

pip 安装

一、说明 CentOS6.5自带python环境为2.6,公司的python环境为2.7. 为了避免出现以后代码出现版本差异,所以把自带的2 .6版本升级到了2.7,过程十分曲折。。。。 中途遇到的问题和解决方法请点击:Python安装时遇到的问题 二、安装步骤 1、下载安装包 官方下载地址为:https://www.python.org/download...