欢迎光临散文网 会员登陆 & 注册

【按键精灵】微信消息控制脚本

2022-01-21 22:18 作者:酷玩蚊仔  | 我要投稿

Import "D:\按键精灵\按键精灵2014\plugin\vbsjson.vbs"

Set json = New vbsJson

Dim Hwnd // 窗口句柄

Dim LTX, LTY, RBX, RBY, windowWidth, windowHeight // 左上角坐标、右下角坐标、窗口宽高


Call 定位窗口


While True

Call 获取消息内容

Delay 500

If action <> "over" Then 

Call 回复内容("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 获取消息内容

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)// 点击复制

Delay 50

clipboard = Plugin.Sys.GetCLB() // 获取剪切板内容

TracePrint clipboard

action = split(clipboard, "|")(0)

If UBound(split(clipboard, "|")) = 1 Then 

params = split(clipboard, "|")(1) // 有参数

Else 

params = "" // 无参数

End If

If action = "双击" Then 

Call 双击(params)

ElseIf action = "文字识别" Then

Call 文字识别(params)

ElseIf action = "截屏" Then

Call 截屏

End If

End Sub


Sub 双击(params)

MoveTo split(params, ",")(0), split(params, ",")(1)

LeftDoubleClick 1

End Sub



Sub 文字识别(params)

Call 获取access_token

Call 区域截图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) // 回车发送

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 区域截图OCR(params)

paramList = split(params, ",")

Call Plugin.Pic.PrintScreen(paramList(0), paramList(1), paramList(2), paramList(3), "D:\OCR测试截图.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测试截图.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 回复内容(wordsArray(i)("location")("left") & "," & wordsArray(i)("location")("top"))

   End If

   Next

End If

xPost.abort

Set xPost = Nothing

End Sub


// 图片转Base64

Function ImagesToBase64(FilePath)

Dim xml

Dim root

Dim fs

Dim objStream

Dim objXMLDoc

Dim Base64

Set objXMLDoc = CreateObject("Microsoft.XMLDOM") // 可以访问和操作XML文档

objXMLDoc.loadXML "<?xml version='1.0' ?><data></data>" // 导入指定字符串的XML文档

Set fs = createObject("Scripting.FileSystemObject") // 可以操作磁盘、文件夹或文本文件

If fs.FileExists(FilePath) Then // 判断文件是否存在

'用 stream 来读取数据

Set objStream = CreateObject("ADODB.Stream") // 可以存取二进制数据或者文本流

objStream.Type = 1 // 表示二进制数据

objStream.Open // 打开objStream

objStream.LoadFromFile FilePath // 加载文件数据(下载图片用SaveToFile)

objXMLDoc.documentElement.dataType = "bin.base64" // 设置节点数据类型

objXMLDoc.documentElement.nodeTypedvalue = objStream.Read // 从objStream读取,再存储到根节点(objXMLDoc.documentElement代表XML文档的根节点)

'数据流读取结束.得到了值 objXMLDoc

'创建XML文件

Set xml = CreateObject("Microsoft.XMLDOM")

xml.load objXMLDoc // 导入指定位置的XML文档

If xml.ReadyState > 2 Then // 0:未初始化;1:载入;2:载入完成;3:交互;4:完成

Set root = xml.getElementsByTagName("data")// 返回指定名字的节点集合(可能会有多个重名节点)

Base64 = root(0).Text

// Base64 = Replace(Base64, vbLf, "") // 去除换行(vbLf相当于chr(10))(可以不去除)

Base64 = Replace(Base64,"+","%2B") // 替换加号(文档未说明,但需要此操作,而且不要进行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 回复内容(result)

Call Plugin.Bkgnd.LeftClick(Hwnd, 60, windowHeight - 60)

Call Plugin.Bkgnd.SendString(Hwnd, result)

Call Plugin.Bkgnd.KeyPress(Hwnd, 13)

End Sub

【按键精灵】微信消息控制脚本的评论 (共 条)

分享到微博请遵守国家法律