当前位置:   article > 正文

Python利用pywin32实现自动操作电脑_python win32gui

python win32gui

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在windows系统上,重复性的操作可以用Python脚本来完成,其中常用的模块是win32gui、win32con、win32api,要使用这三个模块需要先安装pywin32。本文就为大家介绍了如何利用这些模块实现自动操作电脑,感兴趣的可以了解一下

一、 简介

在windows系统上,重复性的操作可以用Python脚本来完成,其中常用的模块是win32gui、win32con、win32api,要使用这三个模块需要先安装pywin32。在cmd中输入如下命令,即可安装pywin32:

pip install pywin32

  • 1
  • 2

这三个模块作用如下:

win32gui:模块定义了Windows下关于图形操作的API,如查找窗口句柄的函数FindWindow和FindWindowEx;

win32con:模块内定义了Windows API内的宏;

win32api:win32api为Microsoft 32位平台的应用程序编程接口,可以模拟按键操作。

二、示例代码

1.引入库

以自动在记事本中输入文本为例,说明如何利用这三个模块进行自动化办公

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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

三、 效果图

在这里插入图片描述

四、代码解释

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文件,并自动输入预置的文本内容,输入完成后自动保存并关闭窗口,从而实现了自动化办公。

五、 常见问题

win32api.ShellExecute(1, ‘open’, ‘D:\test.txt’, ‘’, ‘’, 1)这行代码用默认的程序打开文件,如果你设置默认打开程序不是记事本,那本代码无法自动输入文本到test.txt中

在自动输入文本时,需要保证记事本窗口获得输入焦点,否则程序无法按照预期执行。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/137709
推荐阅读
相关标签
  

闽ICP备14008679号