【按鍵精靈】微信消息控制腳本

Import "D:\按鍵精靈\按鍵精靈2014\plugin\vbsjson.vbs"
Set json = New vbsJson
Dim Hwnd // 窗口句柄
Dim LTX, LTY, RBX, RBY, windowWidth, windowHeight // 左上角坐標(biāo)、右下角坐標(biāo)、窗口寬高
Call 定位窗口
While True
Call 獲取消息內(nèi)容
Delay 500
If action <> "over" Then?
Call 回復(fù)內(nèi)容("over")
End If
Delay 2000
Wend
Sub 定位窗口
Hwnd = Plugin.Window.Find(0, "文件傳輸助手")
TracePrint Hwnd
sRect = Plugin.Window.GetClientRect(Hwnd)
LTX = split(sRect, "|")(0)
LTY = split(sRect, "|")(1)
RBX = split(sRect, "|")(2)
RBY = split(sRect, "|")(3)
windowWidth = RBX - LTX
windowHeight = RBY - LTY
End Sub
Sub 獲取消息內(nèi)容
iNum = Plugin.Bkgnd.GetBlockRange(Hwnd, windowWidth - 90, 0, windowWidth - 90, windowHeight, "F2F2F2", 1)
TracePrint iNum
iBlock = Split(iNum, "|")(0)
msgX = Split(iBlock, ",")(0)
msgY = Split(iBlock, ",")(1) - 5
Call Plugin.Bkgnd.RightClick(Hwnd, msgX, msgY)// 右鍵打開菜單
Delay 300// 確保菜單已打開
HwndMenu = Plugin.Window.Find("CMenuWnd", 0)// 獲取菜單句柄
Call Plugin.Bkgnd.LeftClick(HwndMenu, 10, 10)// 點(diǎn)擊復(fù)制
Delay 50
clipboard = Plugin.Sys.GetCLB() // 獲取剪切板內(nèi)容
TracePrint clipboard
action = split(clipboard, "|")(0)
If UBound(split(clipboard, "|")) = 1 Then?
params = split(clipboard, "|")(1) // 有參數(shù)
Else?
params = "" // 無(wú)參數(shù)
End If
If action = "雙擊" Then?
Call 雙擊(params)
ElseIf action = "文字識(shí)別" Then
Call 文字識(shí)別(params)
ElseIf action = "截屏" Then
Call 截屏
End If
End Sub
Sub 雙擊(params)
MoveTo split(params, ",")(0), split(params, ",")(1)
LeftDoubleClick 1
End Sub
Sub 文字識(shí)別(params)
Call 獲取access_token
Call 區(qū)域截圖OCR(params)
End Sub
Sub 截屏
KeyPress "Print Screen", 1
Call Plugin.Bkgnd.LeftClick(Hwnd, 60, windowHeight - 60)
Delay 50
Call Plugin.Bkgnd.RightClick(Hwnd, 60, windowHeight - 60)
Delay 300
HwndMenu = Plugin.Window.Find("CMenuWnd", 0) // 獲取菜單句柄
Call Plugin.Bkgnd.LeftClick(HwndMenu, 10, 10)
Delay 50
Call Plugin.Bkgnd.KeyPress(Hwnd, 13) // 回車發(fā)送
End Sub
Sub 獲取access_token
// 從ini配置文件讀取 API_KEY 和 SECRET_KEY
API_KEY = Plugin.File.ReadINI("key", "API_KEY", "D:\百度OCR.ini")
SECRET_KEY = Plugin.File.ReadINI("key", "SECRET_KEY", "D:\百度OCR.ini")
// 獲取access_token
Set tokenPost = CreateObject("Msxml2.ServerXMLHTTP.3.0")
tokenPost.Open "Post", "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" & API_KEY & "&client_secret=" & SECRET_KEY, False
tokenPost.Send?
If tokenPost.readyState = 4 Then?
// TracePrint tokenPost.responsetext
Set obj = json.Decode(tokenPost.responsetext)
// TracePrint obj("access_token")
access_token = obj("access_token")
End If
tokenPost.abort
Set tokenPost = Nothing
End Sub
Sub 區(qū)域截圖OCR(params)
paramList = split(params, ",")
Call Plugin.Pic.PrintScreen(paramList(0), paramList(1), paramList(2), paramList(3), "D:\OCR測(cè)試截圖.bmp")
Set xPost = CreateObject("Msxml2.ServerXMLHTTP.3.0")
xPost.Open "Post", "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate?access_token=" & access_token, False
xPost.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
base64Param = "image=" & ImagesToBase64("D:\OCR測(cè)試截圖.bmp") & "&recognize_granularity=big"
xPost.Send (base64Param)
If xPost.readyState=4 Then
?? TracePrint xPost.responsetext
?? Set obj = json.Decode(xPost.responsetext)
?? wordsArray = obj("words_result")
?? For i = 0 To UBound(wordsArray)
?? TracePrint wordsArray(i)("words")
?? TracePrint wordsArray(i)("location")("top")
?? If wordsArray(i)("words") = paramList(4) Then?
?? Call 回復(fù)內(nèi)容(wordsArray(i)("location")("left") & "," & wordsArray(i)("location")("top"))
?? End If
?? Next
End If
xPost.abort
Set xPost = Nothing
End Sub
// 圖片轉(zhuǎn)Base64
Function ImagesToBase64(FilePath)
Dim xml
Dim root
Dim fs
Dim objStream
Dim objXMLDoc
Dim Base64
Set objXMLDoc = CreateObject("Microsoft.XMLDOM") // 可以訪問(wèn)和操作XML文檔
objXMLDoc.loadXML "<?xml version='1.0' ?><data></data>" // 導(dǎo)入指定字符串的XML文檔
Set fs = createObject("Scripting.FileSystemObject") // 可以操作磁盤、文件夾或文本文件
If fs.FileExists(FilePath) Then // 判斷文件是否存在
'用 stream 來(lái)讀取數(shù)據(jù)
Set objStream = CreateObject("ADODB.Stream") // 可以存取二進(jìn)制數(shù)據(jù)或者文本流
objStream.Type = 1 // 表示二進(jìn)制數(shù)據(jù)
objStream.Open // 打開objStream
objStream.LoadFromFile FilePath // 加載文件數(shù)據(jù)(下載圖片用SaveToFile)
objXMLDoc.documentElement.dataType = "bin.base64" // 設(shè)置節(jié)點(diǎn)數(shù)據(jù)類型
objXMLDoc.documentElement.nodeTypedvalue = objStream.Read // 從objStream讀取,再存儲(chǔ)到根節(jié)點(diǎn)(objXMLDoc.documentElement代表XML文檔的根節(jié)點(diǎn))
'數(shù)據(jù)流讀取結(jié)束.得到了值 objXMLDoc
'創(chuàng)建XML文件
Set xml = CreateObject("Microsoft.XMLDOM")
xml.load objXMLDoc // 導(dǎo)入指定位置的XML文檔
If xml.ReadyState > 2 Then // 0:未初始化;1:載入;2:載入完成;3:交互;4:完成
Set root = xml.getElementsByTagName("data")// 返回指定名字的節(jié)點(diǎn)集合(可能會(huì)有多個(gè)重名節(jié)點(diǎn))
Base64 = root(0).Text
// Base64 = Replace(Base64, vbLf, "") // 去除換行(vbLf相當(dāng)于chr(10))(可以不去除)
Base64 = Replace(Base64,"+","%2B") // 替換加號(hào)(文檔未說(shuō)明,但需要此操作,而且不要進(jìn)行urlencode)
Else
Base64 = ""
End If
Set xml = Nothing
Set objStream = Nothing
Else // 文件不存在
Base64 = ""
End If
Set fs = Nothing
Set objXMLDoc = Nothing
ImagesToBase64 = Base64
//TracePrint ImagesToBase64
End Function
Sub 回復(fù)內(nèi)容(result)
Call Plugin.Bkgnd.LeftClick(Hwnd, 60, windowHeight - 60)
Call Plugin.Bkgnd.SendString(Hwnd, result)
Call Plugin.Bkgnd.KeyPress(Hwnd, 13)
End Sub