天天看點

python調用按鍵精靈插件_按鍵精靈——如何實作辦公自由(四)

python調用按鍵精靈插件_按鍵精靈——如何實作辦公自由(四)

這是奔跑的鍵盤俠的第174篇文章

作者|我是奔跑的鍵盤俠 

來源|奔跑的鍵盤俠(ID:runningkeyboardhero)

轉載請聯系授權(微信ID:ctwott)

python調用按鍵精靈插件_按鍵精靈——如何實作辦公自由(四)

前面寫的幾篇,不知道大家是否能看出個是以然,主要是架構的内容,沒有特别繁瑣複雜的代碼。

到任務加工處理這塊其實也不會特别複雜,重點依舊是邏輯結構,比如讀取内容是否足夠精确、新任務還是舊任務怎麼歸類歸檔、任務隊列如何設計(處理到一半故障了怎麼解決?)、故障時檢測報警,慢慢的,你會發現剛從一個坑出來又進了另外一個坑。

python調用按鍵精靈插件_按鍵精靈——如何實作辦公自由(四)

不過,也正是因為這無數的坑坑窪窪,我們才有了一路探索未知世界的動力。總之,既來之則安之,别慫就對了!

關于任務處理的細節方面,主要思路分析為主,代碼參考意義不大,畢竟每個人要處理的任務千變萬化。某些常見通用的功能往期也有分享過代碼,到時候主要貼個傳送門友善大家翻閱。

如果大家平時有做一定積累,這個時候可能就比如容易下手了,任務處理,無非是把各個小功能拼接起來,唯一複雜點的就是邏輯結構排列,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 '模拟鍵盤Enter鍵發送    Delay 200    KeyPress "Esc", 1 '關閉qq視窗End Function
           

5

總結

關于按鍵精靈實作辦公自由,這個的确是可行的,寫到這裡,我自己的感覺是意猶未盡,但是又不想耗費太多精力在這個時間點上。

python調用按鍵精靈插件_按鍵精靈——如何實作辦公自由(四)

再來理一下思路:

通過自己的辦公邏輯設定一個定時器(循環方式),然後把要讀寫處理的任務塞進循環中,至于如何讀寫、如何完成任務,就因人而異了;而日志、預警提醒就是錦上添花的部分了。

其實每個部分都涉及到不同的知識點,比較散亂,但真正難的幾乎沒有,需要大家大膽的去嘗試和不斷的積累經驗。

一千個讀者眼中有一千個哈姆雷特,同樣,一千個代碼作者能寫出一千種不同的編碼。無論如何,還是要結合各自的工作内容場景,設計出自己的邏輯流程圖,然後在動手去逐個部分的coding,定能事半功倍!

python調用按鍵精靈插件_按鍵精靈——如何實作辦公自由(四)

-END-

python調用按鍵精靈插件_按鍵精靈——如何實作辦公自由(四)

© Copyright 

奔跑的鍵盤俠原創作品 | 盡情分享朋友圈 | 轉載請聯系授權

python調用按鍵精靈插件_按鍵精靈——如何實作辦公自由(四)

經典回顧

整天碎碎念的按鍵精靈到底是個啥?

《按鍵精靈課程學習目錄》

按鍵精靈

模拟發送qq消息給好友

找圖功能改進版(循環找圖)

冒泡提示腳本運作狀态

直接打開網頁、檔案、程式的指令

大漠插件的圖文識别應用

Python

微信好友雲圖怎麼玩

四則運算(正規表達式的應用)

寫一個完整的應用程式

量化分析怎麼玩

《Python學習筆記目錄》

python調用按鍵精靈插件_按鍵精靈——如何實作辦公自由(四)

選題/碼字/coding/調試/編輯/排版/修訂再修訂/推送 

看起來簡單,卻遠沒有你想的那麼輕松和容易 

「點贊+轉發+留言」是最好的肯定與鼓勵 

如果你來了,請讓我知道至少 

你「在看」

python調用按鍵精靈插件_按鍵精靈——如何實作辦公自由(四)