ahk系列——ahk_v2实现win任意界面ocr

前言:

   不依赖外部api接口,界面简洁,翻译快速,操作简单, 有网络就能用 、还可以把ocr结果非中文翻译成中文、同样可以识别中英日韩等60多个国家语言并翻译成中文,十分的nice 

 

1、所需环境

  • windows10及其以上环境最佳,其它windows系统也可以没有试过
  • autohotkey v2版本运行(有exe可以忽略)
  • 连接到互联网
  • snipaste截图工具  

2、使用方式

    下载并安装snipaste

    然后运行该脚本,按截图按键进行截图,我的ctrl+alt+a,默认应该不是这个、

    然后再截图界面按下ctrl+1就会执行ocr操作、

    同样ESC:退出ocr界面 

3、效果演示

4、代码

 
  1. #SingleInstance force
  2. Persistent true ;阻止脚本自动退出
  3. FileEncoding "UTF-8" ;读写文件编码设置
  4. CoordMode "Mouse","Screen"
  5. OnMessage 0x0201,WM_LBUTTONDOWN
  6. OnMessage 0x100 ,KEYBOARD_MESSAGE_CALLBACK ;键盘事件
  7. ;ctrl+1执行选中搜狗翻译,搜狗ocr操作
  8. onStartup()
  9. OnClipboardChange ClipChanged ;监听剪切板
  10. onExit onExitApp ;退出时执行
  11.  
  12.  
  13. ;ctrl+1执行选中搜狗翻译,搜狗ocr操作
  14. #MaxThreadsPerHotkey 10
  15. ^1::{
  16. try{
  17. if not ak.ConnectedToInternet(){ ;互联网没有连接
  18. throw Error("没有互联网连接")
  19. }
  20. if not winActive(sogouocr.snipaste_title)
  21. return
  22. MouseGetPos &xpos, &ypos
  23. Tn4:=WinExist(loadgif.loadGuiTitle)?loadgif.loadGui.Destroy():"" ;开始删除动画
  24. Tn3:=WinExist(sogouocr.html_title)?sogouocr.ocrgui.Destroy():"" ;开始删除ocr gui
  25. setTimer(()=>loadgif.show(xpos+5,ypos+5),-1) ;开始异步加载动画
  26. setTimer(()=>loadgif.loadGui.Destroy(),-4000) ;开始4s后关闭动画
  27. sogouocr.showOcrResult()
  28. }catch as e{
  29. msg:=e
  30. }finally{
  31. T5:=loadgif.loadGui?loadgif.loadGui.Destroy():"" ;结束显示结果后关闭动画
  32. }
  33. }
  34.  
  35. ;初始化值
  36. onStartup(socketon:=1)
  37. {
  38. setTimer ()=>sogouocr.sendGetRequest(1),-1 ;初始化ocr请求
  39. setTimer ()=>loadgif.initData() ,-1 ;初始loadgif
  40. if FileExist(sogouocr.catcheguiHtmlPath) ;删除ocr的gui缓存html文件,重新获取html并缓存
  41. fileDelete(sogouocr.catcheguiHtmlPath)
  42. imageutil.init() ;初始化gdi+
  43. return ;
  44. }
  45. ;清除缓存
  46. onExitApp(ExitReason, ExitCode)
  47. {
  48. if FileExist(loadgif.loadhtmlPath) ;清除tmp中文件,在脚本启动时重新生成
  49. fileDelete(loadgif.loadhtmlPath)
  50. imageutil.close() ;关闭gdi+
  51. return ;
  52. }
  53.  
  54. ;移动选框GUI
  55. WM_LBUTTONDOWN(wParam, lParam, msg, hwnd){
  56. OnMessage 0x0201,WM_LBUTTONDOWN
  57. if(A_Cursor="Arrow")
  58. PostMessage 0xA1, 2
  59. }
  60. ;响应键盘事件
  61. KEYBOARD_MESSAGE_CALLBACK(wParam, lParam, msg, hwnd)
  62. {
  63. if((wparam=13 || wparam=27) and sogouocr.ocrGui){ ;ocr窗口响应回车事件和esc事件
  64. sogouocr.ocrGui.destroy() ;ocr
  65. }
  66. }
  67. ;监听剪切板
  68. ClipChanged(DataType)
  69. {
  70. ;DataType 0:什么内容没有,1 txt内容,2:非文本的内容例如图片
  71. ;1 如果剪贴板中仅包含能以文本形式表示的内容 (这里也包含了从资源管理器窗口 复制的文件);
  72. ak.clipdataType:=DataType
  73. }
  74.  
  75. ;搜狗ocr复制原文
  76. srcCopyButton1_OnClick()
  77. {
  78. ; msgBox % SoGouOcr.result_source " :" SoGouOcr.result_trans
  79. A_Clipboard:=sogouocr.contentObj.contents
  80. sogouocr.ocrgui.destroy()
  81. }
  82. ;搜狗ocr复制翻译后
  83. srcCopyButton2_OnClick()
  84. {
  85. A_Clipboard:=sogouocr.contentObj.trans
  86. sogouocr.ocrgui.destroy()
  87. }
  88. ;搜狗ocr关闭窗口事件
  89. exitBtn1_OnClick()
  90. {
  91. sogouocr.ocrgui.destroy()
  92. }
  93.  
  94. ;获取图片或者ico等的base64编码
  95. getIco(icoName)
  96. {
  97. static obj:={
  98. ;加载动画
  99. loadGif:"
  100. ( LTrim Join
  101. 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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  102. )"
  103. }
  104. return obj.%icoName%
  105. }
  106.  
  107. class sogouocr
  108. {
  109. static url1:="https://fanyi.sogou.com/" ;搜狗主页 ,获取带有SNUID相关cookie
  110. static url2:="https://fanyi.sogou.com/picture" ;搜狗图片识别网页 ,获取uuid
  111. static url3:="https://pb.sogou.com/cl.gif?" ;打开文件会发送一个get请求 ,获取带有SNUID相关cookie
  112. static url4:="https://fanyi.sogou.com/api/transpc/picture/upload" ;上传文件接口,需要携带 snuid和FQV相关cookie
  113. static url5:="https://fanyi.sogou.com/picture" ;界面显示所需要的html
  114. static boundary := "----WebKitFormBoundaryaEHpMn3lywBtjPfE" ;formData边界
  115. static userAgent:="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
  116. static header:="" ;访问url产生的请求头信息包括cookie
  117. static uuid:="" ;方位url2返回的请求头中的uuid
  118. static snipaste_title:="Snipper - Snipaste"
  119. static html_title:="ahk_sogouocr_result_v1"
  120. static html_zoom:=0.7 ;网页缩放
  121. static font_size:=25 ;设置字体大小
  122. static html_top_color:="#0af59b" ;顶部边框颜色
  123. static pic_min_w:=40 ;图片最小允许宽度,小于这高度就会按照pic_scale放大
  124. static pic_min_h:=30 ;图片最小允许高度,小于这高度就会按照pic_scale放大
  125. static pic_scale:=2.5 ; 图片缩放比例
  126. static gui_w:=500 ;没有缩放之前的gui大小
  127. static screen_gap:=5 ;设置显示与边框的位置间隙
  128. static catcheguiHtmlPath:=A_temp . "\ahkocrgui.catche.delete.html" ;缓存ocr渲染
  129. static catche_uuid:="b32a8d43-c01b-c3dc-1313-82fa0ddf0457-" . Random(1,10000) ;用于ocr的html页面缓存数据
  130. static ocrgui:="" ;ocr的gui
  131. static contentObj:="" ;翻译返回的json结果
  132. static req := comObject("WinHttp.WinHttpRequest.5.1") ;请求对象
  133. static xbuttonpicPath:="" ;快捷ocr保存图片所在位置
  134.  
  135. ;剪切板中获取png图片并且恢复png
  136. static showOcrResult()
  137. {
  138. path:=this.capturePic() ;截图并保存到临时文件 大概100ms左右
  139. contentObj:=this.sendallRequest(path) ;发送请求并获取json数据,230ms左右
  140. this.contentObj:=contentObj
  141. this.showocrGui(contentObj) ;渲染json数据到gui中
  142. }
  143. static capturePic()
  144. {
  145. if((tmp:=ak.clipdataType)!=2) ;非图片时才恢复数据
  146. clipboard_save:=ClipboardAll()
  147. A_Clipboard:="" ,placeholder:="===========♜==========="
  148. ControlSend "^c", ,this.snipaste_title ;发送ctrl+c
  149. if not clipwait(3,1){ ;1任意类型
  150. T3:=tmp==2?(A_Clipboard:=placeholder):(A_Clipboard:=clipboard_save) ;恢复数据
  151. throw Error("等待剪切板超时")
  152. }
  153. path:=Format("{1}\{2}-{3}-{4}_{5}-{6}-{7}_ocr.png",A_Temp,A_YYYY,A_MM,A_DD,A_Hour,A_Min,A_Sec)
  154. ; saveflag:=ak.savepic(path,this.pic_min_w,this.pic_min_h,this.pic_scale) ;用powershell方式保存图片,慢!
  155. imageutil.saveclip(path,this.pic_min_w,this.pic_min_h,this.pic_scale)
  156. T3:=tmp==2?(A_Clipboard:=placeholder):(A_Clipboard:=clipboard_save) ;恢复数据
  157. return path
  158. }
  159. ;发送所有请求,并缓存cookie ,会返回一个json
  160. static sendallRequest(pngpath)
  161. {
  162. ; req.SetProxy(2, "127.0.0.1:8888") ;设置fiddler抓包服务器
  163. T1:= not this.header?this.sendGetRequest():""
  164. json:=this.sendPostRequest(pngpath) ;大概170ms左右
  165. contentObj:=this.dealResult(json)
  166. return contentObj
  167. }
  168. ;显示ocrgui页面,添加gui并渲染html,传入json数据
  169. static showocrGui(contentObj)
  170. {
  171. page:=this.getGuiHtml(contentObj) ;获取渲染页面
  172. Tn3:=winActive(sogouocr.html_title)?sogouocr.ocrgui.Destroy():"" ;删除之前ocr gui
  173. this.ocrgui:=ocrGui:=Gui("+LastFound +AlwaysOnTop -Caption +ToolWindow",this.html_title) ;添加gui并渲染html
  174. WB := ocrGui.Add("ActiveX",Format( "x0 y0 w{1} h{2}" ,this.gui_w*this.html_zoom,1080),"Shell.Explorer").Value
  175. ak.display(WB,page) ;展示页面
  176. div_h:=WB.document.getElementById("mainDiv").offsetHeight ;获取当前div高度
  177. srcBtn:= WB.document.getElementById("src-clipboard") ;复制【源数据】按钮
  178. tranBtn := WB.document.getElementById("target-clipboard") ;复制【翻译数据】按钮
  179. exitBtn1 := WB.document.getElementById("exitBtn1") ;退出【X】按钮
  180. srcBtn.onclick:=(()=>srcCopyButton1_OnClick())
  181. tranBtn.onclick:=(()=>srcCopyButton2_OnClick())
  182. exitBtn1.onclick:=(()=>exitBtn1_OnClick())
  183. mainDivW:=this.gui_w*this.html_zoom
  184. mainDivH:=div_h*this.html_zoom
  185. MouseGetPos &x, &y ;获取鼠标位置
  186. ak.dealshowGui(x,y,mainDivW,mainDivH,&newX,&newY) ;重新计算坐标位置
  187. ocrGui.Show(Format("x{1} y{2} w{3} h{4}",newX,newY,mainDivW,mainDivH))
  188. ak.frameShadow(ocrGui.hwnd ) ;窗口阴影
  189. }
  190. ;请求url5,获取渲染页面所需要的html ,传入处理后的json结果 ,可以缓存页面
  191. static getGuiHtml(contentObj)
  192. {
  193. ;判断缓存是否存在
  194. if not fileExist(this.catcheguiHtmlPath){
  195. static req := ComObject("WinHttp.WinHttpRequest.5.1")
  196. req.open("GET",this.url5 ,true) ;必须有http:// ,true 异步,false 同步(默认)
  197. req.Send()
  198. req.WaitForResponse()
  199. result := req.ResponseText
  200. start_element:='<!--[if lte IE 9]> <script>' ,end_element:='</div><script>' ;开头结尾标记
  201. result:=StrReplace(result,'"//','"https://')
  202. start_pos:=instr(result,start_element,1,1) ;找到body开头
  203. if(!start_pos)
  204. throw Error("在html中未找到开头元素:" . start_element)
  205. end_pos:= instr(result,end_element,1,start_pos) ;参数依次是1.目标字符,2.要匹配的字符,3.是否大小写消息敏感,4.起始位置
  206. if(!end_pos)
  207. throw Error("在html中未找到结尾元素:" . end_element)
  208. html_header:=subStr(result,1,start_pos-1)
  209. html_footer:=subStr(result,end_pos+strLen("</div>"))
  210. fileAppend Format("{1}{2}{3}",html_header, this.catche_uuid ,html_footer) ,this.catcheguiHtmlPath ;缓存
  211. }else{
  212. htmlcontent:=FileRead(this.catcheguiHtmlPath)
  213. }
  214. font_size:=strLen(contentObj.contents)>40?this.font_size*0.85:this.font_size ;缩放字体
  215. exit_left:=this.html_zoom*this.gui_w-18,exit_top:=8,exit_zoom:=0.3 ;退出图标
  216. convert_left:=10, convert_bottom:=30,convert_zoom:=0.5 ;转换图标
  217. gui_w:=this.gui_w * this.html_zoom ,gui_r:=gui_w+10 ;右滑块宽度10px
  218. to_right:=Format("window.scrollTo({1},0)",gui_r), to_left:=Format("window.scrollTo(0,{1})",gui_w)
  219. main_div:=Format('<div id="mainDiv" style="zoom:{1};border-top:5px solid {2}">',this.html_zoom,this.html_top_color)
  220. div_element_start:=Format('{1}<div class="trans-box pic"><div class="pic-result-box"><div class="pic-from"><div class="text-box" style="font-size:{2}px" ><p>'
  221. ,main_div,font_size)
  222. ;导入搜狗图片并设置图标
  223. html_style:=Format('<style>.source_trans_convert{width: 30px;height: 30px;z-index:100;zoom:{1};background: url("https://search.sogoucdn.com/translate/pc/static/img/sprite_common_translate.ed1fb14.png") no-repeat;background-position: -372px -176px;}.source_trans_convert:hover{ cursor:pointer;background: url("https://search.sogoucdn.com/translate/pc/static/img/sprite_common_translate.ed1fb14.png") no-repeat; background-position: -372px -142px;zoom:0.51}.html_gui_exit{width: 38px;height: 38px;zoom:{2};position: fixed;left:{3}px;top: {4}px;z-index:2;background: url("https://search.sogoucdn.com/translate/pc/static/img/sprite_common_translate.ed1fb14.png") no-repeat;background-position: -78px -319px;}.html_gui_exit:hover{cursor:pointer;background: url("https://search.sogoucdn.com/translate/pc/static/img/sprite_common_translate.ed1fb14.png") no-repeat;background-position: -38px -319px;zoom:0.32}</style>'
  224. ,convert_zoom,exit_zoom,exit_left,exit_top)
  225. ;JS的左右(原数据,翻译)切换操作
  226. html_script:=Format('<script>var flag=true;window.onload = function(){var div_h = document.getElementById("mainDiv").offsetHeight;document.getElementById("convertBtn1").style.position="fixed";document.getElementById("convertBtn1").style.top=(div_h*{1}-{2})+"px";document.getElementById("convertBtn1").style.left="{3}px";};function convert_click(){if(flag){{4}}else{{5}}flag=!flag}</script>'
  227. ,this.html_zoom,convert_bottom,convert_left,to_right,to_left)
  228. ;退出图标html
  229. ico_div:='<div class="html_gui_exit" id="exitBtn1"></div><div class="source_trans_convert" onclick="convert_click()" id="convertBtn1"></div>'
  230. span_elements:="" ,span_elements2:="" ;需要构造html所需要的数据
  231. for k,v in contentObj.contentArr{
  232. span_elements.=Format('<span id="left-{1}-s">{2}</span>',k,strReplace(strReplace(v,"<","&lt;"),">","&gt"))
  233. }
  234. for k2,v2 in contentObj.transArr{
  235. span_elements2.=Format('<span id="right-{1}-s">{2}</span>',k2,strReplace(strReplace(v2,"<","&lt;"),">","&gt"))
  236. }
  237. right_copy:=Format('<div id="target-clipboard" class="btn-copy" >{1}</div>',"复制") ;构建复制图标
  238. right_element:=Format('<div class="pic-to"><div class="text-box"><p>{1}</p></div>{2}</div>',span_elements2,right_copy)
  239. div_element_end:=Format('</p></div><div id="src-clipboard" class="btn-copy">{1}</div></div>{2}</div></div>',"复制",right_element)
  240. bodyhtml:=html_style html_script ico_div div_element_start span_elements div_element_end ;构造所需body
  241. result_html:=isSet(htmlcontent)?strReplace(htmlcontent,this.catche_uuid,bodyhtml):(html_header . bodyhtml . html_footer) ;组装html
  242. return result_html
  243. }
  244. ;发送get请求打开搜狗翻译主页主要为了获取cookie中的snuid(url3,url4中),FQV(url中) ,wuid(url3中)使用
  245. static sendGetRequest(init:=0)
  246. {
  247. Thread "Priority" ,-1
  248. try{
  249. if not ak.ConnectedToInternet() ;互联网没有连接
  250. throw Error("没有互联网连连接")
  251. ;①请求url1
  252. this.req.Open("get", this.url1,true) ;true 表示异步
  253. this.req.setRequestHeader("User-Agent",this.userAgent) ;在open之后
  254. this.req.send()
  255. this.req.WaitForResponse()
  256. headers:=this.req.GetAllResponseHeaders() ;获取所有相应头 ,里面包含cookie
  257. this.header:=this.header?this.header:ak.getHeaderObj(headers)
  258. ;②请求url2
  259. this.req.Open("get", this.url2,true) ;true 表示异步
  260. this.req.send()
  261. this.req.WaitForResponse()
  262. this.uuid:=this.req.GetResponseHeader("UUID:") ;获取相关cookie
  263. ;③.请求url3发送预请求
  264. this.sendPreGetRequest()
  265. }catch as e{
  266. throw e
  267. }
  268. }
  269. ;发送上传图片的预请求
  270. static sendPreGetRequest()
  271. {
  272. ;③请求url3
  273. _t:=ak.getTimeStamp() ,_r:=floor(1000* Random(0.0,1.0))
  274. snuid:=this.header.cookie.snuid.value
  275. wuid:=this.header.cookie.wuid.value
  276. url3WithParam := format("{1}uigs_productid=vs_web&vstype=translate&snuid={2}&pagetype=index&type=imgtrans&uuid={3}&fr=default&terminal=web&onerror=true"
  277. . "&wuid={4}&overIe10=1&abtest=3&uigs_cl=upload_click_home&_t={5}&_r={6}&uigs_st=0",this.url3,snuid,this.uuid,wuid,_t,_r)
  278. this.req.Open("get", url3WithParam,true)
  279. this.req.send()
  280. this.req.WaitForResponse()
  281. return true
  282. }
  283. ;④.请求url4上传文件提交图片 并返回解析的json字符串 ,传入req请求和图片路径
  284. static sendPostRequest(pngpath)
  285. {
  286. ;实例:ABTEST=6|1673104302|v17; IPLOC=CN5101;SNUID=DD5759A6D2D620B6A66D186BD31414E5;FQV=c7862eb243f3dfbcf3b287dcc047f0e7
  287. currentCookie:=Format("ABTEST={1};IPLOC={2};SNUID={3};FQV={4}"
  288. ,this.header.cookie.ABTEST.value,"",this.header.cookie.SNUID.value,this.header.cookie.FQV.value)
  289. while not FileExist(pngpath){ ;3s文件不存在就退出
  290. sleep 20
  291. if(A_index>=100)
  292. throw Error("文件不存在")
  293. }
  294. extra_data:='{"from":"auto","to":"zh-CHS","imageName":"xx.png"}'
  295. sec_ch_ua:= '"Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"'
  296. objParam := Map("fileData",[pngpath],"fuuid",this.uuid,"extraData",extra_data) ;post数据
  297. this.getPostFormBinData(&PostData,&hdr_ContentType, objParam)
  298. this.req.Open("POST", this.url4,true)
  299. this.req.SetRequestHeader("Content-Type", hdr_ContentType)
  300. this.req.SetRequestHeader("sec-ch-ua",sec_ch_ua)
  301. this.req.SetRequestHeader("sec-ch-ua-mobile","?0")
  302. this.req.SetRequestHeader("sec-ch-ua-platform","Windows")
  303. this.req.SetRequestHeader("sec-Fetch-Dest","empty")
  304. this.req.SetRequestHeader("sec-Fetch-Mode","cors")
  305. this.req.SetRequestHeader("sec-Fetch-Site","same-origin")
  306. this.req.SetRequestHeader("User-Agent",this.userAgent)
  307. this.req.SetRequestHeader("cookie",currentCookie)
  308. this.req.Send(PostData)
  309. this.req.WaitForResponse()
  310. jsonresult:=this.req.ResponseText
  311. return jsonresult
  312. }
  313. ;处理返回数据,提取json中有用的数据 ,resJson:返回的完整json
  314. ;返回示例一个对象:{source:"识别数据",trans:"翻译后的数据"}
  315. static dealResult(resjsonStr)
  316. {
  317. if not resjsonStr
  318. throw Error("返回json字符串为空")
  319. retobj:={} ,contents:="" ,trans:="",contentArr:=[] ,transArr:=[]
  320. jsonObj:=JSON2.parse(resjsonStr)
  321. if(((data:=jsonObj.data)=="null") or jsonObj.status!=0)
  322. return
  323. resultArr:=jsonObj.data.result
  324. for contentobj in resultArr{
  325. contents:=contents . contentobj.content . "`r`n"
  326. trans:=trans . contentobj.trans_content . "`r`n"
  327. contentArr.push(contentobj.content )
  328. transArr.push(contentobj.trans_content)
  329. }
  330. retobj.contents:=contents
  331. retobj.trans:=trans
  332. retobj.contentArr:=contentArr
  333. retobj.transArr:=transArr
  334. return retobj
  335.  
  336. }
  337. ;#获取post请求中payload ,在post慢中对应数据类型为body中的form-data ,数据类型为二进制
  338. ;#retData 返回的二进制数据,retHeader请求头,objParam入参对象 [] 中会被认为是文件
  339. ;#示例:objParam := {"fileData":[src],"fuuid":"aa409350-e00c-49df-9f20-517796457e68","extraData":extra_data}
  340. static getPostFormBinData(&retData,&retHeader,objParam) {
  341. CRLF := "`r`n"
  342. BoundaryLine := "--" . this.boundary ;创建一个边界
  343. binArrs := []
  344. For k, v in objParam ;循环设置值
  345. {
  346. If IsObject(v) {
  347. For i, FileName in v{ ;当前二进制数据来源于文件
  348. str := BoundaryLine . CRLF
  349. . 'Content-Disposition: form-data; name="' . k . '"; filename="' . FileName . '"' . CRLF
  350. . 'Content-Type: ' . this.MimeType(FileName) . CRLF . CRLF
  351. binArrs.Push( this.BinArr_FromString(str) )
  352. binArrs.Push( this.BinArr_FromFile(FileName) )
  353. binArrs.Push( this.BinArr_FromString(CRLF) )
  354. }
  355. } Else {
  356. str := BoundaryLine . CRLF
  357. . 'Content-Disposition: form-data; name="' . k '"' . CRLF . CRLF
  358. . v . CRLF
  359. binArrs.Push( this.BinArr_FromString(str) )
  360. }
  361. }
  362. str := BoundaryLine . "--" . CRLF
  363. binArrs.Push(this.BinArr_FromString(str) )
  364. ; Finish
  365. retData := this.BinArr_Join(binArrs*)
  366. retHeader:= "multipart/form-data; boundary=" . this.boundary
  367. }
  368. ;判断当前类型
  369. static MimeType(FileName) {
  370. n := FileOpen(FileName, "r").ReadUInt()
  371. Return (n = 0x474E5089) ? "image/png"
  372. : (n = 0x38464947) ? "image/gif"
  373. : (n&0xFFFF = 0x4D42 ) ? "image/bmp"
  374. : (n&0xFFFF = 0xD8FF ) ? "image/jpeg"
  375. : (n&0xFFFF = 0x4949 ) ? "image/tiff"
  376. : (n&0xFFFF = 0x4D4D ) ? "image/tiff"
  377. : "application/octet-stream"
  378. }
  379. ;字符串转换为二进制
  380. static BinArr_FromString(str) {
  381. oADO := ComObject("ADODB.Stream")
  382. oADO.Type := 2 ; adTypeText
  383. oADO.Mode := 3 ; adModeReadWrite
  384. oADO.Open
  385. oADO.Charset := "UTF-8"
  386. oADO.WriteText(str)
  387. oADO.Position := 0
  388. oADO.Type := 1 ; adTypeBinary
  389. oADO.Position := 3 ; Skip UTF-8 BOM
  390. BinRes:=oADO.Read
  391. oADO.Close
  392. return BinRes
  393. }
  394. ;把文件转换为二进制
  395. static BinArr_FromFile(FileName) {
  396. oADO := comObject("ADODB.Stream")
  397. oADO.Type := 1 ; adTypeBinary
  398. oADO.Open
  399. oADO.LoadFromFile(FileName)
  400. BinRes:=oADO.Read
  401. oADO.Close
  402. return BinRes
  403. }
  404. ;合并二进制数据
  405. static BinArr_Join(Arrays*) {
  406. oADO := comObject("ADODB.Stream")
  407. oADO.Type := 1 ; adTypeBinary
  408. oADO.Mode := 3 ; adModeReadWrite
  409. oADO.Open
  410. For i, arr in Arrays
  411. oADO.Write(arr)
  412. oADO.Position := 0
  413. BinRes:=oADO.Read
  414. oADO.Close
  415. return BinRes
  416. }
  417. }
  418. ;----------------------------------------------------------------------------------------------------------搜狗ocr class
  419. ;----------------------------------------------------------------------------------------------------------等待动画类 class
  420. class loadgif
  421. {
  422. ;等待动画的html 缓存在tmp中,初始化脚本会删除配置
  423. static waithtml:=('<html><head></head><body style="margin: 0;background-color: {1};">' . ;{1}#ffffff背景颜色
  424. '<img src="data:image/jpeg;base64,{2}">' . ;{2}base64编码
  425. '</body> ' .
  426. '</html>')
  427. static loadhtmlPath:=Format("{1}\sogotranswaitload.tmp.html",A_Temp) ;缓存gif每次重启会删除
  428. static background_color:="#ffffff" ;gui和html背景色,设置为其它色会有短暂的显示
  429. static loadGifWb:=unset ;activeX的句柄
  430. static loadGifsize:=30 ;加载图标size
  431. static loadGuiTitle:="ahk2loaddingTitle" ;加载动画标题
  432. static loadGui:="" ;loadgif的GUI
  433. ;初始化数据,flag=0 第一次执行脚本的时候后初始化,falg=1 在运行时初始化
  434. static initData(flag:=0)
  435. {
  436. if not flag{
  437. T0:= FileExist(this.loadhtmlPath)? fileDelete(this.loadhtmlPath):""
  438. this.initData(1)
  439. return
  440. }
  441. if not FileExist(this.loadhtmlPath){
  442. waitLoadHtml:=Format(this.waithtml,this.background_color,getIco("loadGif"))
  443. FileAppend(waitLoadHtml, this.loadhtmlPath)
  444. }
  445. }
  446. ;显示等待动画 在指定位置
  447. static show(xPos,yPos)
  448. {
  449. this.initData(1)
  450. this.loadGui:=loadGui:=Gui("+AlwaysOnTop -Caption +ToolWindow",this.loadGuiTitle) ;参数1:gui.opt支持的任何选项,参数2:标题
  451. loadGui.BackColor := Ltrim(this.background_color,"#")
  452. WinSetTransColor(loadGui.BackColor " 250", loadGui) ;设置透明色
  453. this.loadGifWb:=WB:= loadGui.Add("ActiveX", Format("x0 y0 w{1} h{2}",this.loadGifsize+18,this.loadGifsize+18), "Shell.Explorer").Value ;添加activex组件最多支持IE11
  454. loadGui.Show(Format("x{1} y{2} w{3} h{4} NoActivate",xPos,yPos,this.loadGifsize,this.loadGifsize))
  455. ak.display(WB,,this.loadhtmlPath)
  456. }
  457. }
  458. ;----------------------------------------------------------------------------------------------------------等待动画类 class
  459. ;----------------------------------------------------------------------------------------------------------image GDI+工具类
  460. class imageutil
  461. {
  462. ;GDI句柄
  463. static GdipToken := 0
  464.  
  465. ;当前托盘图标,防止重复创建同一图标
  466. static trayiconFlag:=0
  467.  
  468. ;初始化GDI+模块
  469. static init()
  470. {
  471. DllCall("LoadLibrary", "str", "gdiplus")
  472. si := Buffer(A_PtrSize = 4 ? 16:24, 0) ; sizeof(GdiplusStartupInput) = 16, 24
  473. NumPut("uint", 0x1, si)
  474. DllCall("gdiplus\GdiplusStartup", "ptr*", &GdipToken:=0, "ptr", si, "ptr", 0)
  475. this.GdipToken:=GdipToken
  476. }
  477. ;保存图片,默认png格式 ,filepath:路径,minW/minH:缩放的最小宽度/高度小于就缩放scale倍数,sextension文件类型png
  478. static saveclip(filepath,minW:=0,minH:=0,scale:=1,extension:="png")
  479. {
  480. if not (pBitmap:=this.getBitFromClip())
  481. throw Error("获取pBitmap异常")
  482. this.saveBitmap(pBitmap,filepath,minW,minH,scale,extension)
  483. }
  484. ;保存bitmap图片
  485. static saveBitmap(pBitmap,filepath,minW:=0,minH:=0,scale:=1,extension:="png")
  486. {
  487. if not pBitmap
  488. throw Error("传入pBitmap异常")
  489. this.select_codec(pBitmap, &pCodec, &ep, &ci, &v ,extension)
  490. DllCall("gdiplus\GdipGetImageWidth", "ptr", pBitmap, "uint*", &width:=0) ;获取图片宽度
  491. DllCall("gdiplus\GdipGetImageHeight", "ptr", pBitmap, "uint*", &height:=0) ;获取图片高度
  492. scale:=(width<minW or height<minH )?scale:1
  493. this.BitmapScale(&pBitmap,scale) ;缩放
  494. Loop {
  495. if !DllCall("gdiplus\GdipSaveImageToFile", "ptr", pBitmap, "wstr", filepath, "ptr", pCodec, "ptr", IsSet(ep) ? ep : 0)
  496. break
  497. else
  498. if A_Index < 6
  499. Sleep (2**(A_Index-1) * 30)
  500. else
  501. throw Error("保存图片异常")
  502. }
  503. }
  504. ;获取粘贴板数据返回bitmap的指针 pBitmap ,非图片时报错
  505. static getBitFromClip() {
  506. Loop{
  507. if DllCall("OpenClipboard", "ptr", A_ScriptHwnd)
  508. break
  509. else
  510. if A_Index < 6
  511. Sleep (2**(A_Index-1) * 30)
  512. else
  513. throw Error("打开剪切板失败")
  514. }
  515. if !DllCall("IsClipboardFormatAvailable", "uint", 2){ ;CF_BITMAP
  516. DllCall("CloseClipboard")
  517. throw Error("获取CF_BIUTMAP失败")
  518. }
  519. if !(hbm := DllCall("GetClipboardData", "uint", 2, "ptr")){
  520. DllCall("CloseClipboard")
  521. throw Error("获取剪切板数据失败")
  522. }
  523. DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "ptr", hbm, "ptr", 0, "ptr*", &pBitmap:=0)
  524. DllCall("DeleteObject", "ptr", hbm)
  525. DllCall("CloseClipboard")
  526. return pBitmap
  527. }
  528. ;获取图片的编码信息
  529. static select_codec(pBitmap, &pCodec, &ep, &ci, &v ,extension:="png", quality:=100) {
  530. ; Fill a buffer with the available image codec info.
  531. DllCall("gdiplus\GdipGetImageEncodersSize", "uint*", &count:=0, "uint*", &size:=0)
  532. DllCall("gdiplus\GdipGetImageEncoders", "uint", count, "uint", size, "ptr", ci := Buffer(size))
  533. loop {
  534. if (A_Index > count) ;Could not find a matching encoder for the specified file format.
  535. throw Error("找不到匹配的图片编码")
  536. idx := (48+7*A_PtrSize)*(A_Index-1)
  537. } until InStr(StrGet(NumGet(ci, idx+32+3*A_PtrSize, "ptr"), "UTF-16"), extension) ; FilenameExtension
  538. pCodec := ci.ptr + idx ; ClassID
  539. return 1
  540. }
  541. ;缩放图片,scale 缩放倍数,可以是数组[m,n] 表示长度缩放m倍数,宽度缩放n倍数
  542. static BitmapScale(&pBitmap, scale) {
  543. if not (IsObject(scale) && ((scale[1] ~= "^\d+$") || (scale[2] ~= "^\d+$")) || (scale ~= "^\d+(\.\d+)?$"))
  544. throw Error("缩放倍数异常scale:" . scale)
  545.  
  546. ; Get Bitmap width, height, and format.
  547. DllCall("gdiplus\GdipGetImageWidth", "ptr", pBitmap, "uint*", &width:=0)
  548. DllCall("gdiplus\GdipGetImageHeight", "ptr", pBitmap, "uint*", &height:=0)
  549. DllCall("gdiplus\GdipGetImagePixelFormat", "ptr", pBitmap, "int*", &format:=0)
  550.  
  551. if IsObject(scale) {
  552. safe_w := (scale[1] ~= "^\d+$") ? scale[1] : Round(width / height * scale[2])
  553. safe_h := (scale[2] ~= "^\d+$") ? scale[2] : Round(height / width * scale[1])
  554. } else {
  555. safe_w := Ceil(width * scale)
  556. safe_h := Ceil(height * scale)
  557. }
  558.  
  559. ; Avoid drawing if no changes detected.
  560. if (safe_w = width && safe_h = height)
  561. return pBitmap
  562.  
  563. ; Create a new bitmap and get the graphics context.
  564. DllCall("gdiplus\GdipCreateBitmapFromScan0"
  565. , "int", safe_w, "int", safe_h, "int", 0, "int", format, "ptr", 0, "ptr*", &pBitmapScale:=0)
  566. DllCall("gdiplus\GdipGetImageGraphicsContext", "ptr", pBitmapScale, "ptr*", &pGraphics:=0)
  567.  
  568. ; Set settings in graphics context.
  569. DllCall("gdiplus\GdipSetPixelOffsetMode", "ptr", pGraphics, "int", 2) ; Half pixel offset.
  570. DllCall("gdiplus\GdipSetCompositingMode", "ptr", pGraphics, "int", 1) ; Overwrite/SourceCopy.
  571. DllCall("gdiplus\GdipSetInterpolationMode", "ptr", pGraphics, "int", 7) ; HighQualityBicubic
  572.  
  573. ; Draw Image.
  574. DllCall("gdiplus\GdipCreateImageAttributes", "ptr*", &ImageAttr:=0)
  575. DllCall("gdiplus\GdipSetImageAttributesWrapMode", "ptr", ImageAttr, "int", 3) ; WrapModeTileFlipXY
  576. DllCall("gdiplus\GdipDrawImageRectRectI"
  577. , "ptr", pGraphics
  578. , "ptr", pBitmap
  579. , "int", 0, "int", 0, "int", safe_w, "int", safe_h ; destination rectangle
  580. , "int", 0, "int", 0, "int", width, "int", height ; source rectangle
  581. , "int", 2
  582. , "ptr", ImageAttr
  583. , "ptr", 0
  584. , "ptr", 0)
  585. DllCall("gdiplus\GdipDisposeImageAttributes", "ptr", ImageAttr)
  586.  
  587. ; Clean up the graphics context.
  588. DllCall("gdiplus\GdipDeleteGraphics", "ptr", pGraphics)
  589. DllCall("gdiplus\GdipDisposeImage", "ptr", pBitmap)
  590.  
  591. return pBitmap := pBitmapScale
  592. }
  593. ;关闭GDI+
  594. static close()
  595. {
  596. If (this.GdipToken) {
  597. DllCall("gdiplus\GdiplusShutdown", "UInt", this.GdipToken)
  598. }
  599. DllCall("FreeLibrary", "ptr", DllCall("GetModuleHandle", "str", "gdiplus", "ptr"))
  600. }
  601. }
  602. ;----------------------------------------------------------------------------------------------------------image GDI+工具类
  603. ;----------------------------------------------------------------------------------------------------------JSON工具类
  604. ;可以用于把comobject对象转换为ahk对象
  605. class JSON2
  606. {
  607. static uuidA:="0763C49802734108979739D89C0CC7A4" . A_NowUTC
  608. static uuidB:="C8C0655017FB428FB18EECF88E6E85CF" . A_NowUTC
  609. static uuidC:="08E3043B62324D0C8BDDB6A2A1DB4E6A" . A_NowUTC
  610. ;解析json
  611. static parse(str)
  612. {
  613. str:=inStr(str,'\\')?strReplace(str,'\\',this.uuidC):str ;替换 \\
  614. str:=inStr(str,'\"')?strReplace(str,'\"',this.uuidA):str ;替换 \"
  615. str:=inStr(str,"'")?strReplace(str,"'",this.uuidB):str ;替换 '
  616. return this.recurve(str)
  617. }
  618. ;Func 把对象转换为字符串
  619. static stringify(obj)
  620. {
  621. return this.GetJS().JSON.stringify(obj)
  622. }
  623. ;递归解析json
  624. static recurve(str,recFlag:=0)
  625. {
  626. static eval := ObjBindMethod(this.GetJS(), 'eval')
  627. if not recFlag{
  628. obj:= eval(Format('(function(){obj=JSON.parse({1}{2}{3});tmp=obj.length?"":obj["keys"]=Object.keys(obj);return obj})()'
  629. ,"'",str,"'"))
  630. return this.recurve(obj,1)
  631. }
  632. if(type(str)=="ComObject"){
  633. if(str.hasOwnProperty("length")){ ;数组
  634. tmpArr:=[]
  635. Loop str.length {
  636. if type(value:=str.%A_index-1%)=="ComObject"
  637. tmpArr.push(this.recurve(this.recurve(this.stringify(value),0),1))
  638. else
  639. tmpArr.push(this.recurve(value,1))
  640. }
  641. return tmpArr
  642. }else{ ;对象 注意js的下标是0开始
  643. tmpObject:={}
  644. Loop str.keys.length{
  645. key:=str.keys.%A_index-1%
  646. if type(value:=str.%key%)=="ComObject"{
  647. tmpObject.%key%:=this.recurve(this.recurve(this.stringify(value),0),1)
  648. }else
  649. tmpObject.%key%:=this.recurve(value,1) ;
  650. }
  651. return tmpObject
  652. }
  653. }else{ ;普通类型,可能是已经组装好的map或者是组装好的array
  654. ; msgBox type(str)
  655. if type(str)=="Object" or type(str)=="Array"
  656. return str
  657. str:=inStr(str,this.uuidA)?strReplace(str,this.uuidA,'"'):str
  658. str:=inStr(str,this.uuidB)?strReplace(str,this.uuidB,"'"):str
  659. str:=inStr(str,this.uuidC)?strReplace(str,this.uuidC,"\"):str
  660. return str
  661. }
  662. }
  663. ;获取JS对象
  664. static GetJS() {
  665. static document := '', JS
  666. if !document {
  667. document := ComObject('HTMLFILE')
  668. document.write('<meta http-equiv="X-UA-Compatible" content="IE=9">')
  669. JS := document.parentWindow
  670. (document.documentMode < 9 && JS.execScript())
  671. }
  672. return JS
  673. }
  674. }
  675. ;----------------------------------------------------------------------------------------------------------JSON工具类
  676. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ak工具类class
  677. class ak{
  678. static clipdataType:=1
  679. ;判断是否连接互联网
  680. static ConnectedToInternet(flag:=0x40) {
  681. Return DllCall("Wininet.dll\InternetGetConnectedState", "Str", flag,"Int",0)
  682. }
  683.  
  684. ;Func 显示网页 WB:activeX句柄 ,content:html内容,path:文件位置,timeout:=300
  685. static display(WB,content:="",path:="",timeout:=300)
  686. {
  687. if not content and not path
  688. throw Error("展示html时content和path同时为空")
  689. WB.silent := true
  690. if(content and not path and count:=1 ){
  691. while(FileExist(f:=Format("{1}\{2}{3}-tmp{4}DELETEME.html",A_Temp,A_TickCount,A_NowUTC,count)))
  692. count+=1
  693. FileAppend content,f
  694. }else if(path and not content)
  695. f:=path
  696. WB.Navigate("file://" . f)
  697. while((WB.readystate != 4) and --timeout>0)
  698. sleep 10
  699. return true
  700. }
  701.  
  702. ;Func 处理在屏幕上显示的位置,返回图像所在x,y
  703. static dealshowGui(x,y,w,h,&newX, &newY,gap:=5)
  704. {
  705. newX:=x+w>A_ScreenWidth-gap ? A_ScreenWidth-gap -w:x ;处理右边界
  706. newY:=y+h>A_ScreenHeight-20?y-20-h:y ;处理下边界
  707. }
  708. ;Func frameShadow 窗口阴影
  709. static frameShadow(HGui)
  710. {
  711. _MARGINS:=Buffer(16)
  712. NumPut("UInt",0,_MARGINS,0),NumPut("UInt",0,_MARGINS,4),NumPut("UInt",1,_MARGINS,8),NumPut("UInt",0,_MARGINS,12)
  713. DllCall("dwmapi\DwmSetWindowAttribute", "Ptr", HGui, "UInt", 2, "Int*", 2, "UInt", 4)
  714. DllCall("dwmapi\DwmExtendFrameIntoClientArea", "Ptr", HGui, "Ptr", _MARGINS)
  715. }
  716. ;Func 获取请求头中的数据返回一个obj对象传入一个请求头 map={a:{value:"hello",path:"/" , expires:"Sun, 22 Jan 2023 03:46:59 GMT",size:n},xx:"xxx"}
  717. static getHeaderObj(header)
  718. {
  719. resobj:={},cookieobj:={},size:=0
  720. Loop parse ,header, "`n" {
  721. if A_loopField and index:=inStr(A_loopField,":"){
  722. key:=trim(subStr(A_loopField,1,index-1))
  723. value:=trim(subStr(A_loopField,index+1))
  724. if(key=="Set-Cookie"){
  725. lineobj:={} , cookieKey:=""
  726. for v in strSplit(value,";"){
  727. if indexb:=inStr(v,"=") {
  728. a:=trim(subStr(v,1,indexb-1))
  729. b:=trim(subStr(v,indexb+1))
  730. A_index==1 ?((lineobj.value:=b)and (cookieKey:=a)):(lineobj.%a%:=b)
  731. }
  732. }
  733. cookieobj.%cookieKey%:=lineobj
  734. size+=1
  735. }
  736. cookieobj.size:=size
  737. resobj.%key%:=value
  738. }
  739. }
  740. resobj.cookie:=cookieobj
  741. return resobj
  742. }
  743. ;Func 获取时间戳
  744. static getTimeStamp(){
  745. ; datediff 计算现在的utc时间到unix时间戳的起始时间经过的秒数
  746. return DateDiff(A_NowUTC,'19700101000000','S')*1000+A_MSec
  747. }
  748. }
  749. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ak工具类class
 

5、总结

    和翻译原理一样也是爬取翻译网页界面,不同的是这个ocr过程比较复杂,需要请求各种网页得到cookie和一些标识码等、总之还是取之于互联网,整合用于互联网,不自己造轮子、

exe下载链接:https://download.csdn.net/download/qq_34407846/88382059

posted @ 2024-10-23 14:49  CharyGao  阅读(2)  评论(0编辑  收藏  举报