我的编程空间,编程开发者的网络收藏夹
学习永远不晚

多窗口下的批量操作脚本 - 利用win3

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

多窗口下的批量操作脚本 - 利用win3

环境:python 3.7.x

使用的模块:pyautogui, win32gui

使用的工具:WindowSpy++

 

背景:最近要用帮同学处理400+张图片的文字识别,考虑用python实现 [天若OCR] 的批处理,临时抱佛脚学了一些东西,过程磕磕绊绊的,就记录一下。

 

1. 鼠标键盘动作模拟的模块(包)选择

百度到的键鼠模拟包主要有PyUserInputpyautogui两个包可选,具体如下:

  PyUserInput: 集成了py3.x之前的pymouse和pykeyboard等模块,需要先安装pyHook环境,之后可以pip install PyUserInput

  pyautogui:  windows下可直接pip install pyautogui

两者都可以实现丰富的键鼠操作,但我在尝试UserInput的时候遇到了一些问题:不同系统的键盘名称有区别,但不太好找到windows对应的键盘名称表。

多次尝试无果后,我就选择了pyautogui,它功能与UserInput无异、可以直接使用pip安装,还能很方便地找到一些函数和按键的快查表(如 https://blog.csdn.net/ibiao/article/details/77859997 - "pyautogui (一)")。

* 在使用pyautogui的过程中,我遇到了一些问题,如反复使用pyautogui.hotkey('ctrl','v')来模拟Ctrl+V热键的时候,有一定的概率出错。我的解决方式是十分笨拙的手动模拟:

1 import pyautogui as pg
2 
3 pg.keyDown('ctrl')
4 pg.press('v')
5 pg.keyUp('ctrl')

 

2.多窗口下切换前置窗口

本着少做调查研究的原则,我本来是打算用模拟键盘alt+tab的方法直接实现切换窗口的,甚至计算了多个窗口下置换前置的排列组合方法。但是……天若OCR是一个联网才能使用的工具,在 [识别 - 跳出结果窗口] 的时间里,窗口的排列顺序是不确定的,所以多次反复的tab下结果总是不稳定……于是最终还是使用了win32。

论坛里关于使用win32将需要的窗口前置以方便模拟操作的攻略很少,这也是我写这一篇的动机。其实有非常简单的实现方法:

  ①确认需要前置的窗体信息:

    告诉win32前置窗体之前,我们需要得到这个窗体的信息。各种论坛中获取窗体信息的方法主要有使用win32的代码、使用WindowsSpy++、使用按键精灵等。尝试后我觉得WindowsSpy++是最好入门的。这是一款安装和使用的傻瓜机器,点击窗体就能直接看到窗体句柄(窗体的ID)、窗体标题、窗体类名等等信息。窗体句柄和标题(比如图片查看器)是经常会变动的,网友们有各种各样的方法来实时获取窗体句柄,而这里我…………为了偷懒,在窗体关系并不复杂的前提下,我选择了用窗体类名而不是句柄或窗体标题来直接区别不同窗体

    如批量OCR过程中需要前置操作的窗口有[图片查看器]和[文本编辑器],通过WindowsSpy++我得到:记事本的窗体类名是notepad,而Windows照片查看器的窗体类名是Photo_Lightweight_Viewer。

  ②使用win32前置窗体:

    如定义函数,前置[图片查看器]的代码如下:

1 import win32gui
2 
3 def fore_text():
4     #描述类名
5     cla = 'Notepad'
6     #利用方法,通过类名找到窗体句柄
7     ctjb = win32gui.FindWindow(cla,None)
8     #利用方法,通过窗体句柄前置窗体
9     win32gui.SetForegroundWindow(ctjb)    

*  win32gui.FindWindow()函数的信息如下:

(转载自https://blog.csdn.net/guangyinglanshan/article/details/77847952,"如何利用Python和win32编程避免重复性体力劳动(一)——开始、FindWindow和FindWindowEx")

 

3.案例的程序实现

虽然折腾了很久,但这个批量应用天若OCR的小脚本最后显得非常简单……具体代码如下:

 1 import pyautogui as pg
 2 import time
 3 import win32gui
 4 
 5 pg.PAUSE = 1.0
 6 
 7 #window ranges
 8 def fore_picView():
 9     cla = 'Photo_Lightweight_Viewer'
10     hld = win32gui.FindWindow(cla,None)
11     win32gui.SetForegroundWindow(hld)
12 
13 def fore_text():
14     cla = 'Notepad'
15     hld = win32gui.FindWindow(cla,None)
16     win32gui.SetForegroundWindow(hld)    
17 
18 
19 ## make sure TianRuo is open
20 
21 ###########
22 fore_picView()
23 
24 for i in range(0,100):
25 
26     
27     #F4
28     pg.press('f4')
29 
30     #choose rec
31     pg.click(650,400)
32     time.sleep(2.0)
33 
34     #change window
35     fore_text()
36 
37 
38     #Ctrl_V
39     pg.keyDown('ctrl')
40     pg.press('v')
41     pg.keyUp('ctrl')
42     pg.press('enter')
43     pg.press('enter')
44 
45     #change window
46     fore_picView()
47 
48     pg.press('right')

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

多窗口下的批量操作脚本 - 利用win3

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

多窗口下的批量操作脚本 - 利用win3

环境:python 3.7.x使用的模块:pyautogui, win32gui使用的工具:WindowSpy++ 背景:最近要用帮同学处理400+张图片的文字识别,考虑用python实现 [天若OCR] 的批处理,临时抱佛脚学了一些东西,
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录