python win32api教程_python通过api获取数据

python win32api教程_python通过api获取数据0x01Win32API简介Win32API即为Microsoft32位平台(包括:Windows9x,WindowsNT3.1/4.0/5.0,WindowsCE等)的应用程序编程接口(ApplicationProgrammingInterface),是构筑所有32位Windows平台的基石,所有在Win32平台上运行的应用程序都可以调用这些函数。使用Win32API,应用…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

0x01 Win32 API简介

Win32 API即为Microsoft 32位平台(包括:Windows 9x, Windows NT3.1/4.0/5.0, WindowsCE等)的应用程序编程接口(Application Programming Interface),是构筑所有32位Windows平台的基石,所有在Win32平台上运行的应用程序都可以调用这些函数。

使用Win32 API,应用程序可以充分挖掘Windows的32位操作系统的潜力。 Mircrosoft的所有32位平台都支持统一的API,包括函数、结构、消息、宏及接口。使用 Win32 API不但可以开发出在各种平台上都能成功运行的应用程序,而且也可以充分利用每个平台特有的功能和属性。

在具体编程时,程序实现方式的差异依赖于相应平台的底层功能的不同。最显著的差异是某些函数只能在更强大的平台上实现其功能。例如,安全函数只能在Windows NT操作系统下使用。另外一些主要差别就是系统限制,比如值的范围约束,或函数可管理的项目个数等等。

标准Win32 API函数可以分为以下几类:

窗口管理

窗口通用控制

Shell特性

图形设备接口

系统服务

国际特性

网络服务

0x02 Pywin32

1、安装Pywin32

由于本次操作是使用python来操作Win32api,需要先安装Pywin32,可以从这里下载对应的Python和Windows版本文件,下载完后直接运行安装就可以了。

2、截图思路

截图操作的大致思路如下:

模拟按下键盘上的“win + PrtSc”组合键

从剪贴板读取缓存的截图

将截图文件保存在本地

3、模拟按键

win32api.keybd_event(0x91, 0, 0, 0) # 0x91 –> win key

win32api.keybd_event(0x2C, 0, 0, 0) # 0x2C –> PRINT SCREEN key

win32api.keybd_event(0x91, 0, win32con.KEYEVENTF_KEYUP, 0)

win32api.keybd_event(0x2C, 0, win32con.KEYEVENTF_KEYUP, 0)

4、PrtSc相关知识

当按下“win + PrtSc”组合键后,截图被保存在剪贴板中,可以直接在word或者是附件中的画图程序里粘贴后使用,使用剪贴板查看器可以查看剪贴板的内容。

剪贴板在Windows 7/8/10 中是没有的,可以在网上搜索下载一个,一般为clipbrd.exe。

python win32api教程_python通过api获取数据

clipbrd.png

自己操作下就会发现,剪贴板只能存储最近复制的内容,新内容会替换旧内容(不区分图片或文字),QQ截图使用的也是系统剪贴板。

从剪贴板查看器的查看选项可以看到,这里有两种图片格式:位图和DIB位图。

python win32api教程_python通过api获取数据

clipbrd_screen.png

5、从剪贴板中读取截图

win32clipboard.IsClipboardFormatAvailable(formats)确定剪贴板是否包含指定格式的数据。

win32clipboard.GetClipboardData(formats)可以从剪贴板里读取数据。

win32clipboard.OpenClipboard()

if win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_DIB):

data = win32clipboard.GetClipboardData(win32clipboard.CF_DIB)

6、BMP简介

BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

典型的BMP图像文件由四部分组成:

位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;

位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;

调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;

位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。

7、构建结构体

BMP文件头结构体

class BITMAPFILEHEADER(Structure):

_pack_ = 1

_fields_ = [

(‘bfType’, WORD),

(‘bfSize’, DWORD),

(‘bfReserved1’, WORD),

(‘bfReserved2’, WORD),

(‘bfOffBits’, DWORD),

]

位图信息头结构体

class BITMAPINFOHEADER(Structure):

_pack_ = 1

_fields_ = [

(‘biSize’, DWORD),

(‘biWidth’, LONG),

(‘biHeight’, LONG),

(‘biPLanes’, WORD),

(‘biBitCount’, WORD),

(‘biCompression’, DWORD),

(‘biSizeImage’, DWORD),

(‘biXpelsPerMeter’, LONG),

(‘biYpelsPerMeter’, LONG),

(‘biClrUsed’, DWORD),

(‘biClrImportant’, DWORD),

]

用sizeof获取二者的大小并赋值给SIZEOF_BITMAPFILEHEADER和SIZEOF_BITMAPINFOHEADER。

8、拷贝截图数据

BitMapInfoHeaderHandle = BITMAPINFOHEADER()

memmove(pointer(BitMapInfoHeaderHandle), data, SIZEOF_BITMAPINFOHEADER)

BitMapFileHeaderHandle = BITMAPFILEHEADER()

memset(pointer(BitMapFileHeaderHandle), 0, SIZEOF_BITMAPFILEHEADER)

9、写文件头

BitMapFileHeaderHandle.bfType = ord(‘B’) | (ord(‘M’) << 8)

BitMapFileHeaderHandle.bfSize = SIZEOF_BITMAPFILEHEADER + len(data)

SIZEOF_COLORTABLE = 0

BitMapFileHeaderHandle.bfOffBits = SIZEOF_BITMAPFILEHEADER + SIZEOF_BITMAPINFOHEADER + SIZEOF_COLORTABLE

10、生成图片

以二进制方式,先写文件头,再写从剪贴板获取到的字符串到本地的.bmp文件中,完成图片生成。

with open(filename, ‘wb’) as bmp_file:

bmp_file.write(BitMapFileHeaderHandle)

bmp_file.write(data)

print ‘file “{}” created from clipboard image’.format(filename)

0x03 完整代码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183056.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ExtJs自学教程(1):一切从API開始

    ExtJs自学教程(1):一切从API開始

  • 应用程序中的服务器错误怎么解决_web服务器和http服务器

    应用程序中的服务器错误怎么解决_web服务器和http服务器在SEO工作的过程中,我们偶尔会遇到HTTP500内部服务器错误,这样的问题,它是一个明显的HTTP状态码,它在告知站长,你的网站与服务器某些配置一定出现问题。从SEO的角度,如果你不能够及时解决相关问题,那么你的网站会面临短期内与百度爬虫失去链接,时间长久的话,会严重影响网站的相关排名。那么,如何解决,HTTP500内部服务器错误?根据以往SEO网站诊断的经历,蝙蝠侠IT,将通过如下内容,进行浅…

  • MD5加密概述,原理及实现

    MD5加密概述,原理及实现MD5概述:MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。MD5主要特点:不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(一个MD5理论上的确是可能对应无数多个原文的,因为MD5是有限多个的而原文可以是无数多个。比如主流使用的MD5将任意长度的“字节串映射为一个128bit的大整数…

  • 分享社群规划全流程sop(基础搭建、日常维…

    分享社群规划全流程sop(基础搭建、日常维…无套路,纯分享!全套社群运营文档,可学习套用相信不少做社群运营的朋友一定会出现过这种情况,微信社群或者QQ社群内的群成员不活跃,整天群里犹如一潭死水,此外还有运营目标不明确、成员不愿积极发言、大部分人入群从不说话等等问题。作为运营狗一定要学会社群规划,今天就给大家带来一份【社群规划全流程sop】,主要包含基础搭建、日常维护、增留转、互动案例等四个步骤,每个步骤都有详细的规划讲解,以及相关案例,非常值得参考学习使用。社群规划全流程sop社群规划全流程sop社…

  • Python处理CSV文件(一)

    Python处理CSV文件(一)CSV文件CSV(comma-separatedvalue,逗号分隔值)文件格式是一种非常简单的数据存储与分享方式。CSV文件将数据表格存储为纯文本,表格(或电子表格)中的每个单元格都是一个数值或字符串。与Excel文件相比,CSV文件的一个主要优点是有很多程序可以存储、转换和处理纯文本文件;相比之下,能够处理Excel文件的程序却不多。所有电子表格程序、文字处理程序或简单的文本编辑器都可以处理纯文本文件,但不是所有的程序都能处理Excel文件。尽管Excel是一个功能非常强大的工

  • ostream iterator

    ostream iterator1.ostream_iteratortemplate         class_CharT=char,class_Traits=char_traits>classostream_iterator{public: typedef_CharT                        char_type; typedef_Traits

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号