Python利用pywin32实现自动操作电脑
作者:予人三 发布时间:2024-01-03 03:35:59
1. 简介
在windows系统上,重复性的操作可以用Python脚本来完成,其中常用的模块是win32gui、win32con、win32api,要使用这三个模块需要先安装pywin32。在cmd中输入如下命令,即可安装pywin32:
pip install pywin32
这三个模块作用如下:
win32gui:模块定义了Windows下关于图形操作的API,如查找窗口句柄的函数FindWindow和FindWindowEx;
win32con:模块内定义了Windows API内的宏;
win32api:win32api为Microsoft 32位平台的应用程序编程接口,可以模拟按键操作。
2. 示例代码
以自动在记事本中输入文本为例,说明如何利用这三个模块进行自动化办公
import win32gui
import win32con
import win32api
import time
ret = win32api.ShellExecute(1, 'open', 'D:\\test.txt', '', '', 1)
print('正在打开软件...')
time.sleep(2)
handle = win32gui.FindWindow(None,'test.txt - 记事本')
handleEdit = win32gui.FindWindowEx(handle, None, 'EDIT', None)
menu = win32gui.GetMenu(handle)
subMenu = win32gui.GetSubMenu(menu, 0)
mystring=['北国风光,千里冰封,万里雪飘。',
'望长城内外,惟余莽莽;大河上下,顿失滔滔。',
'山舞银蛇,原驰蜡象,欲与天公试比高。',
'须晴日,看红装素裹,分外妖娆。',
'江山如此多娇,引无数英雄竞折腰。',
'惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。',
'一代天骄,成吉思汗,只识弯弓射大雕。',
'俱往矣,数风流人物,还看今朝。','《沁园春·雪》']
for index, i in enumerate(mystring):
for ch in i:
print(ch)
win32gui.SendMessage(handleEdit, win32con.WM_CHAR, ord(ch), 0)
time.sleep(0.05)
# 模拟按下回车键的操作
win32api.keybd_event(13, 0, 0, 0)
time.sleep(0.05)
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)
#获取保存按钮
cmdId=win32gui.GetMenuItemID(subMenu, 3)
#点击保存
win32gui.PostMessage(handle, win32con.WM_COMMAND, cmdId, 0)
#关闭窗口
win32gui.PostMessage(handle, win32con.WM_CLOSE, 0, 0)
3. 效果图
4. 代码解释
1.win32api.ShellExecute(1, 'open', 'D:\\test.txt', '', '', 1)表示打开D盘目录下的test.txt文件。
2.time.sleep(2)有的文件打开比较慢,所以这里等待2秒
3.win32gui.FindWindow(None,'test.txt - 记事本')查找窗口句柄,这里是根据窗口的标题来查找窗口的句柄,第二个参数值要与标题完全一致,如下图
4.win32gui.FindWindowEx(handle, None, 'EDIT', None)用第3步找到的句柄查找输入的窗口,这里窗口对应的参数是’EDIT’,换一个软件可能就不是’EDIT’
5.subMenu = win32gui.GetSubMenu(menu, 0)查找窗口对应的菜单,后面保存文件会用到
6.win32gui.SendMessage(handleEdit, win32con.WM_CHAR, ord(ch), 0)向输入的窗口写入字符ord(ch)
7.win32api.keybd_event(13, 0, 0, 0)写完一行后,模拟键盘输入Enter键,Enter键对应的键值是13,这行代码表示按键按下
8.win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)这行代码表示Enter键键松开
9.cmdId=win32gui.GetMenuItemID(subMenu, 3)根据第5步的子菜单获取保存按钮的索引值,如下图所示,从0开始计数,保存正好是第3个
10.win32gui.PostMessage(handle, win32con.WM_COMMAND, cmdId, 0)发生保存消息
11.win32gui.PostMessage(handle, win32con.WM_CLOSE, 0, 0)发生关闭窗口消息
按照这样的编程流程,就实现了自动打开test.txt文件,并自动输入预置的文本内容,输入完成后自动保存并关闭窗口,从而实现了自动化办公。
5. 常见问题
win32api.ShellExecute(1, 'open', 'D:\\test.txt', '', '', 1)这行代码用默认的程序打开文件,如果你设置默认打开程序不是记事本,那本代码无法自动输入文本到test.txt中
在自动输入文本时,需要保证记事本窗口获得输入焦点,否则程序无法按照预期执行。
来源:https://blog.csdn.net/yurensan/article/details/127721762
猜你喜欢
- 新一代GPT4发布了,今年GPT不断给大家带来惊喜。在OpenAI的官网,也公开了GPT的Python调用第三方库:openai。今天我们就
- 大家知道,在js里encodeURIComponent 方法是一个比较常用的编码方法,但因工作需要,在asp里需用到此方法,查了好多资料,没
- 一、sqlSession简单介绍拿到SqlSessionFactory对象后,会调用SqlSessionFactory的openSesiso
- 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。Pyt
- 今天的问题是请问以下 alert 弹出值分别是什么?var f = function f2()&nb
- 注意,要看懂这里,必须具备简单的Python数据分析知识,必须知道matplotlib的简单使用!例1:plt.subplot(221) #
- SQL Server数据库查询优化的常用方法总结:本文中,abigale代表查询字符串,ada代表数据表名,alice代表字段名。技巧一:问
- MySQL的默认编码是Latin1,不支持中文,如何修改MySQL的默认编码呢,下面以gbk为例来说明(这里只介绍Windows环境下) 1
- 面试题1:先说一下什么是MySQL事务吧正经回答:简单说,事务就是一组原子性的SQL执行单元。如果数据库引擎能够成功地对数据库应 用该组査询
- click() 对象.click() 使对象被点击。 closed 对象.closed 对象窗口是否已关闭true/false clearT
- 实现效果先看看效果这比我手动的快多了,而且是单机的,自动玩没惹骂我,哈哈 ,多人游戏整个自动玩会被骂死~代码没装软件的先安装一下软件,没装模
- 现在有一个横向的IFRAME,需要通过点击iframe外的一个图片来横向滚动iframe内的一个html页,但又不想让看见iframe的滚动
- 本文实例为大家分享了python实现简易学生信息管理系统的具体代码,供大家参考,具体内容如下一、系统功能1.录入学生信息2.查找学生信息3.
- Unsafe code是一种绕过go类型安全和内存安全检查的Go代码。大多数情况,unsafe code是和指针相关的。但是要记住使用uns
- 本次做一个最简单的贪食蛇雏形游戏,就是一个小蛇在画面上移动,我们可以控制蛇的移动方向,但是不能吃东西,蛇不会长大。但是基础的有了,完整版的贪
- 1.项目开发流程2.项目需求说明模拟实现基于文本界面的《家庭记账软件》该软件能够记录家庭的收入,支出,并能够打印收支明细表3.项目的界面4.
- tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好。tem
- 前言Python可以操作Excel的模块不止一种,我习惯使用的写入模块是xlwt(一般都是读写模块分开的)python中使用xlwt操作ex
- 操作步骤:一、安装MySQL数据库1、下载MySQL-5.6.17-winx64.zip文件。2、解压到指定目录,本例为D:\mysql-5
- 1.直方图直方图: (1) 图像中不同像素等级出现的次数 (2) 图像中具有不同等级的像素关于总像素数目的比值。我们使用cv2.calcHi