专栏首页奔跑的键盘侠按键精灵——如何实现办公自由(四)

按键精灵——如何实现办公自由(四)

前面写的几篇,不知道大家是否能看出个所以然,主要是框架的内容,没有特别繁琐复杂的代码。

到任务加工处理这块其实也不会特别复杂,重点依旧是逻辑结构,比如读取内容是否足够精确、新任务还是旧任务怎么归类归档、任务队列如何设计(处理到一半故障了怎么解决?)、故障时检测报警,慢慢的,你会发现刚从一个坑出来又进了另外一个坑。

不过,也正是因为这无数的坑坑洼洼,我们才有了一路探索未知世界的动力。总之,既来之则安之,别怂就对了!

关于任务处理的细节方面,主要思路分析为主,代码参考意义不大,毕竟每个人要处理的任务千变万化。某些常见通用的功能往期也有分享过代码,到时候主要贴个传送门方便大家翻阅。

如果大家平时有做一定积累,这个时候可能就比如容易下手了,任务处理,无非是把各个小功能拼接起来,唯一复杂点的就是逻辑结构排列,so,这个系列的重点依旧是逻辑结构设计,理一下大家的思路就会愈发的清晰了。

1

任务获取与识别

初始化,找到工作台,然后检测新的任务。

可以用runapp命令打开应用窗口,再通过句柄信息锁定窗口(当然通过窗口区域的找色命令也很好用),然后提取窗口内刷新出来的数据,通过OCR或者简单的选择复制获取新任务相关的文本信息。

贴一段OCR的代码供大家作参考:

title = "XXX企业微信群聊"
class_name = "WwStandaloneConversationWnd"
Hwnd = Plugin.Window.Find(class_name,title)
If Hwnd=0 Then 
    MessageBox "未检测到"&title&"窗口,请检查对话框是否有打开"
Else 
    Call Plugin.Window.Restore(Hwnd)
    Delay 200
    Call Plugin.Window.SetClientSize(Hwnd, 500, 600)
    Delay 300
    sText = Plugin.Window.GetClientRect(Hwnd)
    dim Myarray   
    Myarray = Split(sText, "|")   
    x0 = Clng(Myarray(0)): y0 = Clng(Myarray(1))   
    x1 = Clng(Myarray(0)): y1 = Clng(Myarray(1))  
End If
//(x0,y0,x1,y1)为对话框的左上角坐标、右下角坐标
set dm = createobject("dm.dmsoft")
base_path = dm.GetBasePath()
dm_ret = dm.SetPath(base_path)
dm_ret = dm.SetDict(0,"D:\大漠插件3.1233\XXX字库.txt")
扫描区 = dm.Ocr(x0,y0,x1,y1,"cce4fc-000000",1.0)

稍微补充一下,通过对话框的类名和标题名来绑定句柄,然后锁定窗口获取对话消息。关于对话内容的获取,最简单无脑的就是右键点击复制;如果要智能一点的话,可以使用OCR直接去识别文字。

而OCR的使用涉及到了一款神器:大漠插件,往期有介绍过如何使用大漠插件,留一下传送门链接《按键精灵二三事系列第九篇——图文识别+发邮件》

最后的获取到扫描区的文字之后,再进行字符串解析处理。一般需要提取订单时间或者对话时间之类的,于是通过窗口标题名称+时间,基本就可以给这个任务打上标签了:新任务or旧任务。

旧任务,pass当前循环;新任务,加入处理队列。

2

任务加入队列

至于为何要用队列,可能有些人会有点摸不着头脑,如果自动办公内容单一,可以电脑专门自动办公而不会人工操作,完全可以砍掉这个部分。

但是很多场景,你用一台设备自动办公的同时,也需要做其他的工作,极有可能你有更重要的事情,虽然接到几个新订单、但不能马上处理,于是我们需要一个队列、等空闲时直接处理队列中的新订单。

处理上面这种情形,还有另外一种情形:你有两台电脑,一台自动、一台手动,手动这台设备的任务,你可以传递给自动的设备去处理。甚至,可以多台设备发送处理任务到这台自动的设备,就好比医院验血窗口,护士抽血完把标本递交给相应的化验科室,对验血护士来讲就完成了任务。

而化验科室就相当于我们的自动办公主机,要按何种优先顺序去处理收集到的N个标本,就看规则如何了。而对我们来讲,我们也可以做不同的优先级别来对待。

通常来讲,根据订单类型或者是否VIP再结合时间排列,或者只用时间先后来指定优先规则,完全看个人心情喽!

代码过于简单就略了,提供一个最简单的思路:往队列文件夹中写入一个文档,文档名字作为标识;队列文件夹中每多一个文档就代表多了一个任务,仅此而已。

3

任务处理

任务处理反而是最简单的,当然需要你有明确的处理规则。

不怕if分支过多,select case还是蛮好用的。另外,上节内容我们把字典都搬出来了,你觉得还会有按键精灵搞不了的吗?

参考前面的往队列文件夹中写入一个文档的思路,任务处理完,自然要把文档要删除,不可能一直放在队列里。当然,我不建议直接删除,可以使用move,把文档移动到其他文件夹,既可以解决队列消除,也可以存档备份历史任务。

4

日志存档及警报

除了前面说的历史任务备份,还有一个问题要注意,有时候我们并不是特别放心自己代码,特别是刚写好试运行的时候,于是记录下自动办公的操作记录,成了不二之选,当然也可以用于代码完善改进,抑或是过一段时间要统计下自动办公完成了多少任务、寻求下成就感,甚至如果发生什么不好的事情要撤销之前的处理过的任务。这个时候,日志Log就该出场了!

Log文件无非就是记录下XX时间点执行了XX任务(或者调用了什么方法处理了那个订单,涉及到的各种变量等等),说白了,就是写文本而已。

关于警报,再完美的编程也会有报错的时候,毕竟功夫再高,也怕羊刀,谁知道会不会遇到魔法免疫的怪异任务。没关系!我们If分支加一个报警提醒,邮件、qq甚至微信通知任你选,转人工服务!

来一段经典的发送qq消息代码吧,之前也有发过。

Call send_qq_msg(123456789,"hello")

Function sendqqmsg(qqnumber,content)
    Call RunApp("tencent://Message/?menu=yes&exe=&uin=" &qqnumber)
    Hwnd = Plugin.Window.Foreground() '获取qq对画框窗口句柄
    Call Plugin.Window.Active(Hwnd) '激活qq对话框
    Delay 900
    SayString content '输入文本内容
    KeyPress "Enter", 1 '模拟键盘回车键发送
    Delay 200
    KeyPress "Esc", 1 '关闭qq窗口
End Function

5

总结

关于按键精灵实现办公自由,这个的确是可行的,写到这里,我自己的感觉是意犹未尽,但是又不想耗费太多精力在这个时间点上。

再来理一下思路:

通过自己的办公逻辑设置一个定时器(循环方式),然后把要读写处理的任务塞进循环中,至于如何读写、如何完成任务,就因人而异了;而日志、预警提醒就是锦上添花的部分了。

其实每个部分都涉及到不同的知识点,比较散乱,但真正难的几乎没有,需要大家大胆的去尝试和不断的积累经验。

一千个读者眼中有一千个哈姆雷特,同样,一千个代码作者能写出一千种不同的编码。无论如何,还是要结合各自的工作内容场景,设计出自己的逻辑流程图,然后在动手去逐个部分的coding,定能事半功倍!

-END-

本文分享自微信公众号 - 奔跑的键盘侠(runningkeyboardhero),作者:我是奔跑的键盘侠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python——关于排序算法(快速排序法)

    最近一直在写排序的算法,可能讲到合并排序法,很多人就会有点晕乎了,还是要多多研究练习,才能得法。包括我也是,看教程的时候感觉懂了,开始写的时候感觉都忘记了,再复...

    Ed_Frey
  • C语言——小学一年级题目解析(三)

    另外有一个'\0'需要重点记忆,它是字符串结束的标志位。但是在这个字符串数组里,它是啥??我也不懂

    Ed_Frey
  • Python——量化分析介绍(八)

    今天内容不多,也不复杂。首先,之前写的stock_util补充一个获取指定日期前某个交易日期的函数,毕竟后期写到买卖点指标的时候,难免要用到前后两个交易日指标值...

    Ed_Frey
  • Intel 3D打印机器人Jimmy:像外星人的萌娃

    据国外媒体报道,在2014年英特尔开发者大会上,英特尔披露了它开发的3D打印机器人Jimmy。 ? 你猜猜Jimmy做的第一件事是什么?讲了一个冷笑话。它有45...

    机器人网
  • 网页特殊字体过大的优化

    ==font-spider 仅适用于固定文本,如果文字内容为动态可变的,新增的文字将无法显示为特殊字体。==

    天天_哥
  • 2019年AI大事件票选:量子霸权、黑洞照片、华为备胎等

    圣母大学计算机系终身副教授一家人遭两名劫匪抢去汽车,在不到24小时之内,这名教授和博士生二人通过手机发动应用程序和计算机算法中的“贪心算法”,成功将车找回。

    新智元
  • 约束里“:=”和“:/”傻傻分不清楚?今天彻底弄清!

    在SystemVerilog约束之中,有两个点常常让初学者混淆搞不清楚,或者当时记住了后面不用又忘了。今天jerry就专门来侃侃这两个点,让初学者们想忘也忘不了...

    IC验证
  • 内核漏洞利用:通过WARBIRD在Windows 10上提升权限

    在这篇文章中,我想谈一谈通过基于Windows内核的exploit来提升权限。之所以没有使用像HackSys Extreme Vulnerable Window...

    FB客服
  • IO类型与IO模型

    IO类型 同步与异步(synchronous,asynchronous):关注消息通知机制 同步: 进程发出系统调用之后,不会立即有返回信息,但是一旦有返回信息...

    小小科
  • ThreadLocal到底是什么?它解决了什么问题?

    由于 ThreadLocal 支持范型,如 ThreadLocal< StringBuilder >,为表述方便,后文用 变量代表 ThreadLocal 本身...

    IT大咖说

扫码关注云+社区

领取腾讯云代金券