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
猜你喜欢
- 通过优化CSS代码,减小对系统资源的占用。自己整理出几个能减少系统资源占用的CSS写法,要优化网站的页面加载速度,这些注意点不能忽视!一、尽
- 前言本文主要介绍的是关于python 3用BeautifulSoup抓取div标签的方法示例,分享出来供大家参考学习,下面来看看详细的介绍:
- 如何正确显示模式对话框中的中文?msg.htm <html> <head> &nbs
- 搭建lnmp完lnmp环境后,测试时出现502报错,看到这个问题,我立刻想到是php-fpm没有起来,但是我用 ps -ef | grep
- 1.安装wkhtmltopdf下载地址:https://wkhtmltopdf.org/downloads.html我测试用的是window
- 马氏距离区别于欧式距离,如百度知道中所言:马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Ma
- 一、实现过程终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关转义序列是以ESC开头,即用\033来完成(ESC
- 前言:我目前使用的服务器为centos6.x 系统自带的python的版本为2.6.x,但是目前无论是学习还是使用python,python
- 模板引擎说明:模板文件就是按照一定的规则书写的展示效果的HTML文件 模板引擎就是负责按照指定规则进行替换的工具模板引擎选择jinja2一、
- python版本: 3.6pandas版本: 0.23.4行索引索引行有三种方法,分别是 loc iloc iximport pandas
- 主要实现功能1、用户输入用户名,在用户名文件中查找对应的用户,若无对应用户名则打印输入错误2、用户名输入正确后,进行密码匹配。输入密码正确则
- 本文实例讲述了python自动翻译实现方法。分享给大家供大家参考,具体如下:以前学过python的基础,一般也没用过。后来有一个参数表需要中
- 之前看到好友在发各种"群发"来检验对方是不是把自己删除了,好吧,其实那个没啥用处.所以决定自己动手做一个百度了一下,检测
- 哪个Python版本?当我提及Python,所指的就是CPython 2(准确的是2.7).我会显式提醒那些相同的代码在CPython 3
- 在tensorflow中,有三种方式输入数据1. 利用feed_dict送入numpy数组2. 利用队列从文件中直接读取数据3. 预加载数据
- 一、object类的源码class object: """ The most bas
- 最近开始学Python,想直接通过命令行的方式进行学习。奈何没有Tab补全,操作实在麻烦,网上各种百度后无果(x64系统,x86的可以直接下
- ASP,一种最先广泛的流行在WEB行业的编程语言。严格的说,ASP还算不上的编程语言。不过,因为微软的大力支持,ASP这一路,走得非常顺利。
- 用Python编写过批量修改文件名的脚本程序,代码很简单,运行也比较快,唯一美中不足之处是每次批量修改文件名时都需要执行以下步骤:1)复制文
- zip文件是我们经常使用的打包格式之一,python解压和压缩zip效率非凡。 python解压zip文档:#/usr/bin/python