首页 > 编程语言 >[转]python库 Pywin32使用

[转]python库 Pywin32使用

时间:2023-01-27 21:00:09浏览次数:59  
标签:窗口 get python hwnd Pywin32 DC 句柄 win32gui 使用

本文转自:https://www.cnblogs.com/chenjy1225/p/12174889.html

python库 Pywin32使用

 https://github.com/wuxc/pywin32doc

Pywin32提供了很多访问windows的API。较重要的三个模块就是win32api、win32gui和win32con。

Pywin32安装

pip install pywin32

pywin32 api文档可参照wuxc github

DC

DC在pywin32中是一个重要概念。windows不允许程序直接访问硬件,所有的操作都需要通过一个设备上下文环境。屏幕上的每个窗口都对应一个DC。DC相当于一个视频缓冲区,对这个缓冲区的操作,会表现在这个缓冲区对应的屏幕窗口上。

除了窗口对应的DC外,还可以自己创建DC,然后在创建的DC上面建立数据拷贝到窗口的DC上,就相当于刷新窗口的DC。

使用

我们使用pywin32激活窗口并对截图。

test.py:


import win32gui,win32ui,win32con

def get_windows(windowsname,filename):
    # 获取窗口句柄
    handle = win32gui.FindWindow(None,windowsname)
    # 将窗口放在前台,并激活该窗口(窗口不能最小化)
    win32gui.SetForegroundWindow(handle)
    # 获取窗口DC
    hdDC = win32gui.GetWindowDC(handle)
    # 根据句柄创建一个DC
    newhdDC = win32ui.CreateDCFromHandle(hdDC)
    # 创建一个兼容设备内存的DC
    saveDC = newhdDC.CreateCompatibleDC()
    # 创建bitmap保存图片
    saveBitmap = win32ui.CreateBitmap()

    # 获取窗口的位置信息
    left, top, right, bottom = win32gui.GetWindowRect(handle)
    # 窗口长宽
    width = right - left
    height = bottom - top
    # bitmap初始化
    saveBitmap.CreateCompatibleBitmap(newhdDC, width, height)
    saveDC.SelectObject(saveBitmap)
    saveDC.BitBlt((0, 0), (width, height), newhdDC, (0, 0), win32con.SRCCOPY)
    saveBitmap.SaveBitmapFile(saveDC, filename)

get_windows("PyWin32","截图.png")

截图.png:

获取句柄

一般句柄名称都是这个窗口的title。但很多时候我们不能准确的输入title,所以我们可以通过遍历所有窗口的句柄,然后找到自己想要的窗口句柄。

getHandles.py:


import win32gui

hwnd_title = dict()


def get_all_hwnd(hwnd, mouse):
    if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
        hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})


win32gui.EnumWindows(get_all_hwnd, 0)

for h, t in hwnd_title.items():
    if t is not "":
        print(h, t)

结合上一篇的pywinio我们就可以实现一些自动化的东西

打开文档输入helloworld并保存关闭。


import time
import win32gui,win32con
import keyboardEmulation as ke

def get_windows(windowsname,filename):
    # 获取窗口句柄
    hwnd = win32gui.FindWindow(None,windowsname)
    # 将窗口放在前台,并激活该窗口
    win32gui.SetForegroundWindow(hwnd)

    # 输入helloworld

    scancodes = [0x23, 0x12, 0x26, 0x26, 0x18, 0x11, 0x18, 0x13, 0x26, 0x20, 0x2a]

    for code in  scancodes:
        ke.key_press(code)

    # 保存
    ke.key_down(0x1d)
    ke.key_down(0x1f)
    ke.key_up(0x1d)
    ke.key_up(0x1f)

    # 关闭窗口

    time.sleep(1);
    win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)

get_windows("新建文本文档 (2).txt - 记事本","截图.png")

标签:窗口,get,python,hwnd,Pywin32,DC,句柄,win32gui,使用
From: https://www.cnblogs.com/freeliver54/p/17069326.html

相关文章

  • 使用provisio-maven-plugin+ airlift launcher 开发类似trino 的运行包
    如果运行过trino或者presto会发现比较方便,配置放的特别清晰,而且包含了方便的cli工具,实际上trino或者presto内部也是基于了provisio-maven-plugin+airliftlauncher......
  • [转] python-docx
    https://python-docx.readthedocs.io/en/latest/ https://gitcode.net/mirrors/python-openxml/python-docx/-/tree/master/docx python-docxReleasev0.8.11(Inst......
  • [转]Python3 xlrd库基本教程
    本文转自:https://www.w3cschool.cn/python3/python3-xlrd.htmlxlrd库是一个python用于操作excel的第三方库。它的主要功能是用来读取excel。通常会与xlwt 、 xlutils组......
  • Python——02.变量
    变量概念:--变量:将数据临时存储在内存中,该内存名字就是变量,此内存为内存储,相对应的外存储为永久存储举例:手机存储量12(内存储:临时)+286G(外存储)查看内......
  • 如何使用adb 安装 apk应用
    如何使用adb安装apk应用首先下载adb软件;点击下载 安装软件,并添加到环境变量里面;手机开启调试模式cmd输入adbdevice,手机界面同意调试;输入安装命令adb......
  • [python3.10] 引用第三方库 PyMouse、PyKeyboard
    importPyMouse前提条件,__init__.py文件中将fromwindowsimportPyMouse,PyMouseEvent 改为  frompymouse.windows importPyMouse,PyMouseEventpyHook第......
  • Python入门笔记
    Python入门笔记Nowisbetterthannever.Althoughneverisoftenbetterthanrightnow.—————TheZenofPython,byTimPeters目录Python入门笔记1.前言py......
  • Latex使用总结(三)
    问题与方法表格的数据需要垂直居中,如文本+数字的显示,由于文本的长度内容多于数字,因此数字的显示需要在文本的中央。可以在tabular中设置,使用m的方法,注意:需要在文本这一栏......
  • 005 python 打开windows下的软件,python打开记事本 subprocess
    如果要用python代码打开windos上的记事本,代码如下:importsubprocessnotePro=subprocess.Popen('notepad.exe')print(notePro)如果要打开别的软件,则把notepad.exe......
  • 递归函数的全局变量使用技巧
    递归函数的全局变量使用技巧我希望提取以下数组中每个path的值放入一个数组letarr=[{path:'a',b:2,children:[{......