在运行框中翻译

1、原理

  •  原理:爬取搜狗页面翻译结果然后放到运行框中。
  • 使用方法:
    • ①.使用v.1 u32版本运行脚本
    • ②. win+r打开运行框,
    • ③.输入关键字mean+空格+想要翻译的内容 然后【回车】就可以得到结果,只输入mean就会翻译剪切板内容

2、运行效果

在运行框中翻译

3、完整代码(v1.x_u32)

  1. ;keyWords:="\u4F60\u597D\u5440"
  2. ;keyWords:=""
  3. ;keyWords:=Util.decodeUtf8(keyWords)
  4. ;
  5. ;msgbox % SoGouFanyi.mean("baidu")
  6. #If WinActive(Util.decodeUtf8("\u8FD0\u884C")) ;运行
  7. ;执行自定义命令
  8. $ENTER::
  9. ;解决当前搜狗输入饭干扰,其他输入法需要加入这个判定
  10. if WinExist("ahk_class SoPY_Comp")
  11. {
  12. send {ENTER}
  13. return
  14. }
  15. ControlGetText, inputCmd , Edit1, % Constant.RUN_BOX_TITLE
  16. excuteFlag:=RunBoxUtil.runCmd(inputCmd)
  17. ;没有找到对应的自定义命令
  18. if(excuteFlag=1 ||excuteFlag=0)
  19. {
  20. if(excuteFlag==1)
  21. send {ENTER}
  22. Util.closeRunWd()
  23. }
  24. ; ControlSend, % Constant.RUN_BOX_CONTROL, {ENTER}, % Constant.RUN_BOX_TITLE
  25. return
  26. #if
  27. ;----------------------------------------------------------------------------------------------------------运行框类
  28. class RunBoxUtil
  29. {
  30. ;excel计算对象
  31. ;static oExcel := ComObjCreate("Excel.Application")
  32. ;当前是什么操作
  33. static OPERATE:=""
  34. ;当前表达式
  35. static EXPRESSION:=""
  36. static RUN_BOX_CONTROL="Edit1"
  37. static RUN_BOX_TITLE=Util.decodeUtf8("\u8FD0\u884C")
  38. ;翻译
  39. runCmd(rawStr)
  40. {
  41. if(inStr(rawStr,"mean")==1)
  42. {
  43. if(Strlen(trim(rawStr))==4)
  44. {
  45. keyWords:=clipBoard ;计算粘贴板
  46. msg:=util.decodeUtf8("[\u7C98\u8D34\u677F]")
  47. }
  48. else
  49. StringReplace, keyWords,rawStr,mean
  50. ;搜狗翻译
  51. result:=SoGouFanyi.mean(keyWords)
  52. result:=rawStr msg "=" result
  53. ControlsetText, % RunBoxUtil.RUN_BOX_CONTROL,% result, % RunBoxUtil.RUN_BOX_TITLE
  54. ControlSend, % RunBoxUtil.RUN_BOX_CONTROL, {END}, % RunBoxUtil.RUN_BOX_TITLE
  55. return 3
  56. }else
  57. return 1
  58. }
  59. }
  60. ;----------------------------------------------------------------------------------------------------------运行框类
  61. ;----------------------------------------------------------------------------------------------------------搜狗翻译类2
  62. class SoGouFanyi
  63. {
  64. ;https://fanyi.sogou.com/text?keyword=hello&transfrom=auto&transto=en&model=general 英文到中文
  65. ;https://fanyi.sogou.com/text?keyword=%E4%BD%A0%E5%A5%BD&transfrom=auto&transto=zh-CHS&model=general 中文到英文
  66. static url:="https://fanyi.sogou.com/text?keyword="
  67. static User_Agent:="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
  68. ;翻译,调用该方法即可
  69. mean(keyWords)
  70. {
  71. return SoGouFanyi.dealResult(SoGouFanyi.request(encode_url:=Util.urlEncode(SoGouFanyi.getUrl(SoGouFanyi.url,keyWords))))
  72. }
  73. ;调用搜狗翻译
  74. getUrl(url,keyWords)
  75. {
  76. language:="en"
  77. trans_url=%url%%keyWords%&transfrom=auto&transto=%language%&model=general
  78. return trans_url
  79. }
  80. ;请求
  81. request(encode_url)
  82. {
  83. ; encode_url:="https://fanyi.sogou.com/text?keyword=%E5%B7%B2%E7%94%A8%E4%BB%A5%E4%B8%8B%E5%86%85%E5%AE%B9%E7%BF%BB%E8%AF%91%EF%BC%9A%0A%E5%8F%91%E9%A1%BA%E4%B8%B0%0A%0A%E4%BB%8D%E8%A6%81%E7%BF%BB%E8%AF%91%EF%BC%9A%0A%E5%8F%91%E9%A1%BA%E4%B8%B0...&transfrom=auto&transto=en&model=general"
  84. req := ComObjCreate("WinHttp.WinHttpRequest.5.1")
  85. req.Open("get",encode_url)
  86. req.setRequestHeader("User-Agent",SoGouFanyi.User_Agent) ;在open之后
  87. req.send()
  88. req.WaitForResponse()
  89. result:=req.ResponseText
  90. ObjRelease(req) ;释放内存
  91. return result
  92. }
  93. ;处理返回的结果
  94. dealResult(result)
  95. {
  96. label_start=<div class="output ;筛选结果的开始元素,从html中获取
  97. labels:=SoGouFanyi.getHtmlElement(result,label_start)
  98. label_start=<p id="trans-result ;筛选结果的开始元素,从html中获取
  99. labels2:=SoGouFanyi.getHtmlElement(labels,label_start)
  100. labels:= labels2?labels2:labels
  101. return SoGouFanyi.getInnerHtml(labels)
  102. }
  103. ;获取 标签中的文本
  104. getInnerHtml(html)
  105. {
  106. res:="" ,char_arr:=[]
  107. loop ,parse ,html
  108. {
  109. char_arr.push(A_loopField)
  110. if(A_loopField=">")
  111. {
  112. while(char_arr.pop()!="<")
  113. continue
  114. if char_arr.length()>0
  115. char_arr.push(delim)
  116. }
  117. }
  118. loop ,% char_arr.length()
  119. res:=res char_arr[A_index]
  120. return res
  121. }
  122. ;获取html的某些元素,带有标签,传入的是html(完整页面) ,label 起始标签可以不闭合
  123. getHtmlElement(html,label)
  124. {
  125. pre_char:=""
  126. counter_list :=[] ;xx.length()
  127. p:=SubStr(label ,2,inStr(trim(label)," ")-2) ;获取标签
  128. index:=inStr(html,label)
  129. if !index
  130. return ;
  131. frag_html:=SubStr(html,index )
  132. loop ,parse ,frag_html
  133. {
  134. to_char:= pre_char A_LoopField
  135. if(A_LoopField ="<")
  136. counter_list.push(A_index)
  137. if(to_char="</")
  138. {
  139. counter_list.pop()
  140. counter_list.pop()
  141. if(counter_list.length()<=0)
  142. return SubStr(frag_html,1,A_index) . p . ">"
  143. }
  144. if(to_char="/>")
  145. {
  146. counter_list.pop()
  147. if(counter_list.length()<=0)
  148. return ;
  149. }
  150. pre_char:=A_LoopField
  151. }
  152. }
  153. }
  154. ;----------------------------------------------------------------------------------------------------------搜狗翻译类2
  155. ;----------------------------------------------------------------------------------------------------------util
  156. class Util
  157. {
  158. ;利用jsurl编码
  159. urlEncode(url)
  160. {
  161. oSC := ComObjCreate("ScriptControl")
  162. oSC.Language := "JScript"
  163. Script := "var Encoded = encodeURI(""" . url . """)"
  164. oSC.ExecuteStatement(Script)
  165. Return, oSC.Eval("Encoded")
  166. }
  167. ;对utf-8解码
  168. decodeUtf8(value)
  169. {
  170. i := 0
  171. while (i := InStr(value, "\",, i+1)) {
  172. if !(SubStr(value, i+1, 1) == "u")
  173. this.ParseError("\", text, pos - StrLen(SubStr(value, i+1)))
  174. uffff := Abs("0x" . SubStr(value, i+2, 4))
  175. if (A_IsUnicode || uffff < 0x100)
  176. value := SubStr(value, 1, i-1) . Chr(uffff) . SubStr(value, i+6)
  177. }
  178. Return,value
  179. }
  180. ;关闭运行窗口
  181. closeRunWd()
  182. {
  183. IfWinExist ahk_exe explorer.exe
  184. {
  185. RunWdName_Utf8:="\u8FD0\u884C" ;运行
  186. RunWdName:=Util.decodeUtf8(RunWdName_Utf8)
  187. WinClose ,%RunWdName% ; 使用前面找到的窗口
  188. }
  189. }
  190. }
  191. ;----------------------------------------------------------------------------------------------------------util

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
其他

选中字符串中的字母全部大写和全部小写

2023-2-1 22:47:30

其他

按快捷键 ` 显示或者隐藏 Total Commander 10.52 主窗口 2023-2-5 (快捷键 ` 即波浪键~,位于Esc键正下方,位于Tab键正上方)

2023-2-5 21:46:16

2 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
  1. hexuren

    网页翻译有限制,还是使用接口好一点

    • Tmz

      嗯,接口确实稳定,这个相对简单点、

个人中心
购物车
优惠劵
私信列表
搜索