ahk系列-windows超级运行框-表达式计算(12)—功能汇总

1、环境准备

  1. windows 7,8,10,11操作系统
  2. ahk 2.x_64位
  3. 翻译功能需要联网使用

2、使用方式

 输入win+R打开windows运行框 

  1. get/getpath 命令获取配置文件环境变量
  2. set/sets 设置 “用户/系统” 环境变量或者path
  3. encode/decode 中文编码和解码
  4. len 计算字符串长度或者剪切板字符串长度
  5. uuid/cpuid 获取随机id 或者cpu序列号
  6. asc/chr/ord 计算字符的asc码值,中文对应数值,把数值转为对应字符
  7. low/up 把字符串转为小写或大写
  8. + – * /  ** ^ % ()  k(千) w(万) y(亿)  sqrt 数学表达式计算
  9. mean/meank/meanj     翻译中<->英文 ,中<->韩,中<->日
  10. toBase , 0x , o ,(1001010)   任意进制转化,16进制转10进制,8进制转10进制,2进制转10进制
  11. sum/avg  计算数据总和/平均

3、代码

;cpuid预先获取,因为耗时
setTimer ()=>ak.getCpuid() ,-1
#HotIf  winActive("运行") and winActive("ahk_class #32770")
#MaxThreadsPerHotkey 10
;在运行框中执行强大的计算功能,包括数学运算等
:*?:==::{try{rawText:=ControlGetText("Edit1","A") ;fullResult:=runbox.calculateExpression(rawText)if fullResult{ControlsetText(fullResult,"Edit1","A")}ControlSend("{END}","Edit1","A")}
}
#HotIf
;==========================================================================================================系统快捷键映射
;执行各种运算取值
class runbox
{static getconfigPath:=A_ScriptDir "\getconfig.txt"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";执行比表达式计算,"==" 触发,callflag是其他函数调用该方法static calculateExpression(rawstr,callflag:=0){;从配置文件getconfig.txt中获取值if inStr(rawStr,"get ")==1 and (not (str:=Trim(Ltrim(rawStr,"get")))==Trim(rawStr)){result:=this.getExpression(str,&prefix)fulltxt:= rawStr . (prefix?"":"=") . resultreturn fulltxt};从配置文件getconfig.txt中获取值if inStr(rawStr,"getpath ")==1 and (not (str:=Trim(Ltrim(rawStr,"getpath")))==Trim(rawStr)){result:=this.getEnvExpression(str)fulltxt:= rawStr . "=" . resultreturn fulltxt};设置环境变量user/sysif (a:=(inStr(rawStr,"set ")==1) and (not (str:=Trim(Ltrim(rawStr,"set")))==Trim(rawStr)))or (inStr(rawStr,"sets ")==1 and (not (str:=Trim(Ltrim(rawStr,"sets")))==Trim(rawStr))){result:=this.setEnvExpression(str,a?1:0) ;返回成功/失败fulltxt:= rawStr . " " . resultreturn fulltxt};把字符转换为uncode编码if inStr(rawStr,"encode ")==1{result:=this.charcodeExpression(Trim(LTrim(rawStr,"encode")),1)return result};把字unicode编码转换为字符串if inStr(rawStr,"decode ")==1 or inStr(rawStr,"\u")==1{result:=this.charcodeExpression(Trim(LTrim(rawStr,"decode")),0)return result};计算字符串长度if inStr(rawStr,"len ")==1{str:=Trim(LTrim(rawStr,"len"))result:=str?strLen(str):strLen(A_clipboard)fulltxt:=rawStr . (str?"":"[剪切板]") "=" . resultreturn fulltxt};获取cpuidif strLower(trim(rawStr))=="cpuid"{cpuid :=ak.cpuid or ak.getCpuid()fulltxt:= rawStr . "=" . cpuidreturn cpuid};获取uuid随机值if strLower(trim(rawStr))=="uuid"{uuid:=ak.uuid()fulltxt:= rawStr . "=" . uuidreturn uuid};计算字符的asc码值if inStr(rawStr,"asc ")==1{result:=this.ascOrChrExpression(trim(LTrim(rawStr,"asc")),1)fulltxt:= rawStr . "=" . resultreturn fulltxt};计算数字所代表字符if inStr(rawStr,"ord ")==1 or inStr(rawStr,"chr ")==1{result:=this.ascOrChrExpression(Trim(LTrim(LTrim(rawStr,"ord"),"chr")),0)fulltxt:= rawStr . "=" . resultreturn fulltxt};转换为大写if inStr(rawStr,"up ")==1{result:=strUpper(Trim(Ltrim(rawStr,"up")))fulltxt:= rawStr . "=" resultreturn fulltxt};转换为小写if inStr(rawStr,"low ")==1{result:=strLower(Trim(Ltrim(rawStr,"low")))fulltxt:= rawStr . "=" resultreturn fulltxt};计算数学表达式if (result:=this.mathExpression(rawStr)){fulltxt:=rawStr . resultreturn result};计算平方根if inStr(rawStr,"sqrt ")==1{str:=Trim(Ltrim(rawStr,"sqrt"))result:=ak.get_bignumber(sqrt(str),3,0) ;该函数自带 = 或者  ≈fulltxt:=rawStr . resultreturn fulltxt};翻译中<->英翻译,中<->韩互译,中<->日互译 ,注意:判断顺序不能换if ((i2:=(inStr(rawStr,"meank ")==1)) or (i3:=inStr(rawStr,"meanj ")==1 or i1:=(inStr(rawStr,"mean ")==1)) ){str:= inStr(trim(rawStr)," ")?subStr(rawStr,inStr(trim(rawStr)," ")+1):trim(A_Clipboard)result:=this.meanExpression(str,i1??""?"url_ALL":false or i2??""?"url_KO":"" or i3??""?"url_JA":"")fulltxt:=rawStr . (inStr(Trim(rawStr)," ")?"":"[剪切板]") "=" . resultreturn fulltxt};2进制转为10进制 ,传入字符串(11111000011111)if (str:=RTrim(LTrim(Trim(rawStr),"("),")"))!=Trim(rawStr) and not RegExReplace(str,"[10]",""){result:=ak.otherToTen(str,2)fulltxt:=rawStr . "=" . resultreturn callflag?result:fulltxt};8进制转为10进制,传入字符串o开头if  inStr(tr:=trim(rawStr),"o")==1 and not RegExReplace((str:=subStr(tr,2)),"\d+","") {result:=ak.otherToTen(str,8)fulltxt:=rawStr . "=" . resultreturn callflag?result:fulltxt};16进制转为10进制 ,传入字符串0x开头if  inStr(str1:=trim(rawStr),"0x")==1 and not RegExReplace((str:=subStr(str1,3)),"[a-fA-F\d]+","") {result:= Format("{1:d}",str1)fulltxt:=rawStr . "=" . resultreturn result};10进制转为16进制,传入纯数字,不包含任何其它字符if  not RegExReplace((str:=trim(rawStr)),"\d+",""){result:=ak.tenToOther(str,16)fulltxt:=rawStr . "=0x" . resultreturn "0x" . result};任意进制转换,tobase 0x100 2 十六进制转为二进制,tobase 1000 10 16 十进制转为16进制if  instr(rawStr,"tobase ")==1 and (str:=Trim(LTrim(rawStr,"tobase "))){result:=this.tobaseExpression(str)fulltxt:=rawStr . "=" . resultreturn fulltxt};计算平均值if not (str:=Trim(LTrim(rawStr,"avg")))  or inStr(rawStr,"avg ")==1 {result:=this.avgExpression(str)fulltxt:= rawStr . (str?"":"[剪切板]") . resultreturn fulltxt};计算总和if not (str:=Trim(LTrim(rawStr,"sum")))  or inStr(rawStr,"sum ")==1 {result:=this.avgExpression(str,0)fulltxt:= rawStr . (str?"":"[剪切板]") . resultreturn fulltxt}};计算get表达static getExpression(str,&prefix){getconfig:=ak.readFileToMap(this.getconfigPath)if RegExMatch(str,"^([\d.]+)",&outn)==1{ ;倍数取值mn:=outn[1] ;倍数if not (value:=ak.mapget(getconfig,"1" . strReplace(str,mn)))returnregmod:="\[([\+\-\*/\d.^%\(\)]+)\]"while RegExMatch(value,regmod, &OutputVar){prefix:=1num :=ak.polish_notation( mn . "*" . "(" .  OutputVar[1]  . ")" )value :=strReplace(value,"[" . OutputVar[1] . "]", ak.get_bignumber(num,3,0),,,1)}return value}prefix:=0return ak.mapget(getconfig,str,1) or this.getEnvExpression(str) ;直接取值或者是取环境变量};计算getEnv表达式static getEnvExpression(key){return ((s:=reg.getEnv(key,0))?s . "(系统)":"" ) . "`n" . ((u:=reg.getEnv(key))?u . "(用户)":"")};设置setEnv 表达式,user=0表示系统,默认用户;设置path时 ,set path= 清空path,set -path="xx" 删除某个path,set path="xxx"增加一个pathstatic setEnvExpression(str,user){if index:=inStr(str:=Trim(str),"="){key:=RTrim(subStr(str,1,index-1))value:=LTrim(subStr(str,index+1))if not key and not valuereturn "(失败)"if  value='""'{reg.delEnv(key,user)return not reg.getEnv(key,user)?"(删除成功)":"(删除失败)"}else if key="path"{reg.pathPush(value,user)return ak.arrHas(reg.pathArr(user),value)?"(成功)":"(失败)"}else if key="-path"{reg.pathPop(value,user)return not ak.arrHas(reg.pathArr(user),value)?"(成功)":"(失败)"}else{reg.setEnv(key,value,,user)return  reg.getEnv(key,user)?"(添加成功)":"(添加失败)"}}else{return "[失败]"}};计算平均值或者总和 flag:=1 平均值,flag:=0 总和 ,返回结果带有"="或者是"≈"static avgExpression(str,flag:=1){str:= not str ? A_clipboard :str ;获取剪切板数据str:=RegExReplace(RegExReplace(trim(str),"^[\s\r\n]+"),"[\s\r\n]+$","") ;截取开头结尾的空格换行回车str:=RegExReplace(trim(str),"[\s\r\n]+","+",&rcount) ;缩减空格mathExp:="(" . str . ")" . (flag? ("/" . (rcount+1)):"")result:=this.mathExpression(mathExp)index:=inStr(result,"=") || inStr(result,"≈") ;获取结果return subStr(result,index)};进制转换,str原字符串,二进制:111100011 十进制:1024 十六进制:0x100 八进制o100;fromdecimal:需要转换的数据,todecimal:转换后的数据static tobaseExpression(str){args:=strSplit( RegExReplace(trim(str),"\s+"," ") ," ")if(args.length==2){tmpMap:=Map("2","(","8","o","16","0x")return ak.mapget(tmpMap,args[2]) . ak.tenToOther(this.calculateExpression(args[1],1),args[2]) . (args[2]=="2"?")":"")}else if (args.length==3){return ak.tenToOther(ak.otherToTen(args[1],args[2]),args[3])}};搜狗翻译 翻译的语种,kr韩国,ja日本,其它就是中英,其他-中互换static meanExpression(keyword,typeFlag:="url_ALL"){if not ak.ConnectedToInternet(){ ;互联网没有连接return}_map:=Map()_map.set("url_ALL",'https://fanyi.sogou.com/text?keyword={1}') ;任意语言转为中文,中文转英文_map.set("url_KO",'https://fanyi.sogou.com/text?keyword={1}&transfrom=auto&transto=ko&model=general&exchange=true') ;中韩互换_map.set("url_JA",'https://fanyi.sogou.com/text?keyword={1}&transfrom=auto&transto=ja&model=general&exchange=true') ;中日互换encode_url:=ak.urlEncode(Format(_map.get(typeFlag),keyword))static req := ComObject("WinHttp.WinHttpRequest.5.1")req.Open("get",encode_url,true) ;true 异步,false 同步(默认)req.setRequestHeader("User-Agent",this.userAgent) ;在open之后req.send()req.WaitForResponse()result:=req.ResponseTextreturn ak.getInnerHtml(result,"trans-result",0)};计算数学表达式+,- ,x ,/ % ** 操作,支持括号,支持k(千),w(万),y(亿)static mathExpression(str){;计算数学表达式str2:=RegExReplace(str,"[abcdefghijlmnopqrstuvxzABCDEFGHIJLMNOPQRSTUVXZ]+","")if str!=str2returnif(InStr(str, "+") or InStr(str, "-") or  InStr(str, "*") or InStr(str, "/")or InStr(str, "%")  or InStr(str, "**")or  InStr(str, "=") or InStr(str,"≈")or InStr(str, "^")){str:=InStr(str, "=")>0 ? ak.getSuffix(str,"="):str ;使连续计算成为可能str:=InStr(str,"≈")>0 ? ak.getSuffix(str,"≈"):str ;连续计算约等于str:=RegExReplace(str,"\s+","")         ;缩紧字符串if inStr(str,"y") or inStr(str,"w") or inStr(str,"k")char_flag:=1str2:=ak.set_bignumber(str)              ;处理字符y,w,kresult:=ak.polish_notation(str2)         ;用逆波兰表达式计算值result:=ak.get_bignumber(result,3,char_flag??0)      ;保留三位小数fulltxt:=str . result                                ;result中有等号return fulltxt}};计算编码,默认编码,0表示解码static charcodeExpression(str,encode:=1){if encode{result:=ak.encodeUtf8(str)}else{result:=ak.decodeUtf8(str)}return result};计算asc码值static ascOrChrExpression(str,sacb){str2:=RegExReplace(str,"\s+"," ")  ;让空格变小Loop parse ,str2 ," "{result .= (" " . ak.getAscOrChr(Trim(A_LoopField),sacb))}return result}
}
;==========================================================================================================系统快捷键映射
;----------------------------------------------------------------------------------------------------------Reg工具类
;注册表操作工具
class reg
{;用户环境变量位置static HCU:="HKEY_CURRENT_USER\Environment";系统环境变量位置static HLM:="HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment";获取当前某个环境变量的值 ,默认是当前用户static getEnv(key,user:=1){return  ak.mapget(this.getEnvMap(user),key,1)};获取当前所有环境变量 ,默认是当前用户static getEnvMap(user:=1){regpath:=user?this.HCU:this.HLMretMap:=Map()Loop Reg, regpath ,"KV"{retMap.set(A_LoopRegName,RegRead())}return retMap};删除环境变量,默认当前用户static delEnv(key,user:=1){regpath:=user?this.HCU:this.HLMRegDelete regpath ,key};设置环境变量,立即生效,默认是当前用户static setEnv(key,value,type:="REG_SZ",user:=1){regpath:=user?this.HCU:this.HLMRegWrite value, type, regpath, key};添加一个键值对到path ,默认是当前用户static pathPush(key,user:=1){arr:=this.pathArr(user)if(arr and ak.arrHas(arr,key))returnelsearr.push(key)pathStr:=ak.joinArr(arr,";","","")this.setEnv("Path",pathStr,"REG_EXPAND_SZ",user)};在path中删除一个键值,默认是当前用户static pathPop(key,user:=1){paths:=ak.arrDelete(this.pathArr(user),key)pathStr:=ak.joinArr(paths,";","","")this.setEnv("Path",pathStr,"REG_EXPAND_SZ",user)};返回path集合array ,默认是当前用户static pathArr(user:=1){retarr:=[]pathstr:=Rtrim(this.path(user),";")loop parse ,pathstr,";"retarr.push(A_loopField)return retarr};返回一个path字符串,默认是当前用户static path(user:=1){return this.getEnv("Path",user)}
}
;----------------------------------------------------------------------------------------------------------Reg工具类
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ak工具类class
class ak
{static cpuid:="";Fucn 逆波兰表达式计算 + - x ÷ 幂(**/^) 模(%)  expression:数学表达式可以带括号;参考:https://blog.csdn.net/assiduous_me/article/details/101981332static polish_notation(expression){operator_list:=Map("+",0,"-",0,"*",0,"`/",0,"%",0,"^",0) ;注意list的haskey操作只是检测索引operatorlevel_map:=Map("(",0,"+","1","-",1,"*",2,"/","2","%",2,"^",3,")",4)operator_map:=Map("+","add","-","sub" ,"*","multi","/","divi","%","mod2","^","pow")expression:=strReplace(strReplace(RegExReplace(trim(expression),"\s+",""),"**","^") ,"(-","(0-")expression:=inStr(expression,"-(")==1?strReplace(this.insertStrAt(expression,this.mirrorSymbolIndex(expression,"(",")"),")"),"-(","(0-("):expression;①.获取一个中缀表达式集合类似 100+2 -> ["100","+","2"]middlefix_list:=[],fix:=""Loop parse,expression{current_value:=A_LoopFieldif(operatorlevel_map.has(current_value)){tmp:=""!=fix?middlefix_list.push(fix):""middlefix_list.push(current_value)fix:=""}else fix:=fix . current_value}tmp2:=fix!=""?middlefix_list.push(fix):""if(middlefix_list[1]="-"){ ;处理开头为负数middlefix_list.insertAt(1,"(")middlefix_list.insertAt(2,"0")middlefix_list.insertAt(5,")")};②.转换为后缀表达式(逆波兰表达式)operator_stack:=[] ,suffix_list:=[],number_stack:=[]for index ,currentElmt in middlefix_list{if(operator_list.has(currentElmt)){while(operator_stack.length>0 && operatorlevel_map.get(operator_stack.get(operator_stack.Length))>=operatorlevel_map.get(currentElmt))suffix_list.push(operator_stack.pop())operator_stack.push(currentElmt)}else if(currentElmt=="(")operator_stack.push("(")else if(currentElmt==")"){while(operator_stack.length>0 && operatorlevel_map.get(operator_stack.get(operator_stack.length))>operatorlevel_map.get("("))suffix_list.push(operator_stack.pop())if(operator_stack.length>0)operator_stack.pop()}elsesuffix_list.push(currentElmt)}while(operator_stack.length>0)suffix_list.push(operator_stack.pop());③.计算表达式最终的值,规则数字入栈,操作符就出栈两个元素计算值并把结果入栈for key,opertor_or_number in suffix_list{if(operator_list.has(opertor_or_number)){number2:=number_stack.pop(),number1:=number_stack.pop()tmpObj:={add:number1+number2,sub:number1-number2,multi:number1*number2,pow:number1**number2}T1:=opertor_or_number=="/"?(tmpObj.divi:=number1/number2):""       ;除法容易引发除0异常T2:=opertor_or_number=="%"?(tmpObj.mod2:=mod(number1,number2)):""  ;取模容易引发除0异常number_stack.push(tmpObj.%operator_map.get(opertor_or_number)%)}elsenumber_stack.push(opertor_or_number)}return number_stack.pop()};Func 计算对称符号所在位置str:原字符串,firstIndex:左边符号所在位置,symbol:右边符号 返回右边符号在原字符串中索引 "-((10000+500)-500)/2" 返回18static mirrorSymbolIndex(str,Lsymbol,Rsymbol){flag:=false ,list:=[]Loop Parse  ,str {if(Lsymbol==(sub:=subStr(Str,A_index,1))){list.push(sub)flag:=true}R:=Rsymbol==subStr(Str,A_index,1)?list.pop():""if(list.length==0 and flag)return A_index}return 0};Func 在字符串种插入片段 ,str:原字符串,index:插入位置(位置之后插入),frag:插入片段static insertStrAt(str,index,frag){return subStr(str,1,index) . frag . subStr(str,index+1)};Func 处理算式中含有k,w,y的,formula 表达式static set_bignumber(formula){formula:=RegExReplace(formula,"(\d*\.*\d*)k|K","($1*1000)")      ;处理1kformula:=RegExReplace(formula,"(\d*\.*\d*)w|W","($1*10000)")     ;处理 1wformula:=RegExReplace(formula,"(\d*\.*\d*)y|Y","($1*100000000)") ;处理1亿return formula};func 作用:处理大的数字,;参数:bigNumber数字类型的大数字,char_flag:0,1(是否带k,w,y), scale 数字类型保留几位小数;返回:返回字符串;msgBox % Round(100,2)static get_bignumber(bigNumber,scale:=0,char_flag:=1){;判断有几位小数index:=InStr(bigNumber,".")left :=index=0?strLen(bigNumber):InStr(bigNumber,".")-1unit:="",prefix:="="if char_flag{if(left==4) ;单位K{result:=Round(bigNumber/1000,scale)prefix:=(result==bigNumber/1000)?"=":"≈"unit:="k"}else if(left>4 && left <9) ;单位w{result:=Round(bigNumber/10000,scale)prefix:=(result==bigNumber/10000)?"=":"≈"unit:="w"}else if(left>=9) ;单位亿{result:=Round(bigNumber/100000000,scale)prefix:=(result==bigNumber/100000000)?"=":"≈"unit:="亿"}else{ ;小于1kresult:=Round(bigNumber,scale)prefix:=(result==bigNumber)?"=":"≈"}}else{ ;正常表示方式result:=Round(bigNumber,scale)prefix:=(result==bigNumber)?"=":"≈"}result:=RegExReplace(result,"\.0+$","") ;去掉 2.000这样式的if(InStr(result,".")>0)result:=RegExReplace(result,"0+$","")return prefix . result . unit};Func获取cpuid,需要在脚本开始阶段就执行static getCpuid(){query := "SELECT * FROM Win32_Processor"wmi := ComObjGet("winmgmts:\\.\root\cimv2")col := wmi.ExecQuery(query)for obj in col {return this.cpuid:=obj.ProcessorID}return ""};Func 生成32位UUID来源于guidstatic uuid(){shellobj := ComObject("Scriptlet.TypeLib")return RegExReplace(shellobj.GUID,"({|}|-)","") ;去掉花括号和-};Func  十进制转换为任意进制,n:10000 ,也可传入16进制0xstatic tenToOther(n,b){return (n < b ? "" : this.tenToOther(n//b,b)) . ((d:=Mod(n,b)) < 10 ? d : Chr(d+55))};Func 计算任意进制的十进制,str:101010(二进制) 或者其他进制,不能带o或者0x前缀static otherToTen(n,b){MI:=strLen(n) ;幂Loop  parse, nresult .= A_Loopfield  "*" b "^" MI-A_Index "+"return this.polish_notation(rtrim(result,"+"))};Func 帮助map获取值,优化原生map报错问题,ignoreCase是否忽略大小写static mapget(map1,key,ignoreCase:=0){try{if ignoreCase{for k ,v in map1 {if k=keyreturn v}}return map1.get(key)}catch as e{return ""}};获取并保存数组中的值所在位置0static arrHas(arr2,value){for item in arr2{if item==valuereturn A_index}return 0};Func连接数组Array ,arr:数组 ,separator:分隔符,L: 左边添加符号 R:右边添加符号static joinArr(arr  ,separator:=","  ,L:="["  ,R:="]"){for i in arr{L.=(this.joinObj(i) . separator)}return Rtrim(L,",")  . R};删除数组中的值static arrDelete(arr2,value){arr3:=[]for item in arr2{if item!=value{arr3.push(item)}}return arr3};Fucn读取配置文件到map返回一个Map,filePath:文件所在路径 ,注释符号"#"static readFileToMap(filePath,separator:="="){configs:=Map()for line in this.readFileToList(filePath){configs[trim(subStr(line,1,inStr(line,separator)-1))]:=trim(subStr(line,inStr(line,separator)+1))}return configs};Fucn读取配置文件到list返回一个Array,filePath:文件所在路径 ,注释符号"#"static readFileToList(filePath){lines:=[]Loop read, filePathtmp:=(line:=trim(A_LoopReadLine)) and (not (inStr(line,"#")==1))?lines.push(line):unsetreturn lines};Func 利用js对url编码,由于采用js方式加密所以字符串中的“ " ”需要处理一下static urlEncode(url){static htmlfile := ComObject('htmlfile')htmlfile.write('<meta http-equiv="X-UA-Compatible" content="IE=edge">')return  htmlfile.parentWindow.encodeURI(url) ;还有一个方法encodeURIComponent会连http都编码};func 获取一个字符asc码值或是chr值static getAscOrChr(item,ascb:=1){_map:=Map()_map.set("0","{NUL}")   ;空 ^@_map.set("1","{SOH}")   ;头标开始 ^A_map.set("2","{STX}")   ;正文开始 ^B_map.set("4","{EOT}")   ;正文结束 ^C_map.set("5","{ENQ}")   ;查询 ^E_map.set("6","{ACK}")   ;确认 ^F_map.set("7","{BEL}")   ;震铃 ^G_map.set("8","{BS}")    ;退格 ^H_map.set("9","{TAB}")   ;水平制表符_map.set("10","{LF}")   ;换行 ^J_map.set("11","{VT}")   ;竖直制表符 ^K_map.set("12","{FF}")   ;换页^L_map.set("13","{回车}") ;回车_map.set("14","{SO}")   ;移出 ^N_map.set("15","{SI}")   ;移入 ^O_map.set("16","{DLE}")  ;数据链路转意 ^P_map.set("17","{DC1}")  ;设备控制符1 ^Q_map.set("18","{DC2}")  ;设备控制符2 ^R_map.set("19","{DC3}")  ;设备控制符3 ^S_map.set("20","{DC4}")  ;设备控制符4 ^T_map.set("21","{NAK}")  ;反确认 ^U_map.set("22","{SYN}")  ;同步空闲 ^V_map.set("23","{ETB}")  ;传输块结束 ^W_map.set("24","{CAN}")  ;取消^X_map.set("25","{EM}")   ;媒体结束 ^Y_map.set("26","{SUB}")  ;替换 ^Z_map.set("27","{ESC}")  ;转意 ^[_map.set("28","{FS}")   ;文件分隔符 ^\_map.set("29","{GS}")   ;组分隔符 ^]_map.set("30","{RS}")   ;记录分隔符 ^6_map.set("31","{US}")   ;单元分隔符 ^-_map.set("32","{空格}") ;空格_map.set("127","{^BASCK SPACE}") ;退格;添加常规字符Loop  94_map.set(String(A_index+32),chr(A_index+32))return ascb?(this.maprget(_map,item) || Ord(item)):(this.mapget(_map,item) || chr(item))};通过value值来寻找key ,一般是一个key映射一个数组的时候,取数组中一个值来找keystatic maprget(mmap,value){for k ,v in mmap{if (type(v)=="Array" and this.arrhas(v,value) )or(v==value){return k}}return};Func对中文编码进行unicode编码static encodeUtf8(str){resultStr:=""Loop  Parse, str {resultStr:=resultStr . "\u" .  String(Ord(A_LoopField)>0x100 ? Format("{:04X}", Ord(A_LoopField) ):A_LoopField)}return resultStr};Func 对中英文unicode进行解码static decodeUtf8(str){ret:="",aStr:=subStr(str,1,inStr(str,"\u")-1),bStr:=subStr(str,inStr(str,"\u")),arr:=strSplit(bStr,"\u")for k in arr{ret:=k?ret . chr(Abs("0x" . subStr(k,1,4))) . subStr(k,5):""}return aStr . ret};判断是否连接互联网static ConnectedToInternet(flag:=0x40) {Return DllCall("Wininet.dll\InternetGetConnectedState", "Str", flag,"Int",0)};Func 获取某个指定id的元素内容,htmlcontent:整个html页面,id:标签里面的id,htmlflag:如果有html就返回html;htmlflag:=0就是只取标签中的文字,不管有多少个标签。默认该值返回标签static getInnerHtml(htmlcontent,id,htmlflag:=1){js:= ComObject("htmlfile")js.write(htmlcontent)document :=js.parentWindow.documentelement:=document.getElementByID(id)if element{return htmlflag?element.innerHtml:element.innerText}}
}
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ak工具类class

4、总结

各个具体功能、用法、代码,参考之前windows超级运行框-表达式系列1-11文章、

如果不需要全部功能可以通过之前文章中的代码自己组装需要的功能,也可以直接在代码中注释掉if判断语句,很多功能使用的类和函数名都一样、

各位大佬觉得还有什么功能需要补充,欢迎评论区讨论、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法题】一种字符串压缩表示的解压(js)

输入&#xff1a;2dff 输出 !error 两个d不需要压缩&#xff0c;故输入不合法 输入:4eA 输出:!error 全部由小写英文字母组成&#xff0c;压缩后不会出现&#xff0c;故输出不合法 function solution(str) {const error "!error";// 只能包含小写字母和数字 [^a-z0…

详解线段树

前段时间写过一篇关于树状数组的博客树状数组&#xff0c;今天我们要介绍的是线段树&#xff0c;线段树比树状数组中的应用场景更加的广泛。这些问题也是在leetcode 11月的每日一题频繁遇到的问题&#xff0c;实际上线段树就和红黑树 、堆一样是一类模板&#xff0c;但是标准库…

【荣誉】科东软件荣获广州市软件行业协会双料大奖!

软件产业在数字经济中扮演着基础支撑的角色&#xff0c;对于优化产业结构、提高自主可控、赋能整体经济高质量发展具有关键作用。 近日&#xff0c;广州市软件行业第七届会员大会第三次会议成功召开&#xff01;此次会议旨在回顾过去一年的行业发展&#xff0c;展望未来的趋势和…

React useCallback 详解

在 React 中&#xff0c;useCallback 是一个非常实用的 Hook&#xff0c;它可以帮助我们避免在每次渲染时都创建新的函数&#xff0c;从而提高性能。useCallback 返回一个记忆化的回调函数&#xff0c;它只在其依赖项改变时才会改变。 下面是一个详细的 React useCallback 教程…

nginx编译安装及配置文件的修改

编译安装nginx 1.关闭防火墙&#xff0c;安全机制&#xff0c;去官网下载nginx压缩包&#xff0c;并进行解压 systemctl stop firewalld #关闭防火墙 systemctl disable --now firewalld #开机不自启并立即关闭防火墙 setenforce 0 #关闭安全机制 2.安装依赖包&#xff0…

CSU计算机学院2023秋C语言期中题目思路分享(前三道题)

文章目录 写在前面A&#xff1a;个税计算——阅读理解与数据类型转换原题输入输出样例输入样例输出 题目分析题目理解代码实现与问题解决 我的代码 B&#xff1a;时制转换——问题是一点点解决的原题输入输出样例输入样例输出 题目分析我的代码 C&#xff1a;统计进位——人教版…

编程语言分类

如果要将编程语言分成两大类&#xff0c;可以考虑以下分类方式&#xff1a; 编译型语言&#xff08;Compiled Languages&#xff09;&#xff1a;这类语言在运行之前需要通过编译器将源代码转换为机器码或类似形式的可执行代码。编译型语言的特点包括&#xff1a; 需要显式的编…

用PHP与html做一个简单的登录页面

用PHP与html做一个简单的登录页面 login.html的设计 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…

我一人全干!之二,vue3后台管理系统树形目录的实现。

一个完整的后台管理系统需要一个树形结构的目录&#xff0c;方便用户切换页面。 因为使用的是element-plus的ui库&#xff0c;所以首选el-menu组件&#xff0c;点击查看文档。 因为此组件不是树形结构的&#xff0c;所以需要封装成系统需要的树形结构组件。可以使用vue的递归组…

探索鸿蒙_ArkTs开发语言

ArkTs 在正常的网页开发中&#xff0c;实现一个效果&#xff0c;需要htmlcssjs三种语言实现。 但是使用ArkTs语言&#xff0c;就能全部实现了。 ArkTs是基于TypeScript的&#xff0c;但是呢&#xff0c;TypeScript是基于javascript的&#xff0c;所以ArkTs不但能完成js的工作&a…

传导电流密度方向与磁矢位方向相同

矢量位 A ⃗ \vec A A 由于磁感应强度 B ⃗ \vec B B 是无源场&#xff0c;散度为0&#xff0c; ∇ ⋅ B ⃗ 0 \nabla \cdot \vec B 0 ∇⋅B 0, 因此引入矢量位 A ⃗ \vec A A , 满足 ∇ A ⃗ B ⃗ \begin{align} \nabla \times \vec A &\vec B \end{align} ∇A ​B ​…

Vue3 Element-Plus 一站式生成动态表单:简化前端开发流程

文章目录 1. 引言2. Vue3 和 Element-Plus 简介2.1 Vue32.2 Element-Plus 3. 动态表单的需求与挑战4. Vue3 和 Element-Plus 动态表单的优势4.1 Vue3的组合式API4.2 Element-Plus的表单组件 5. 一站式生成动态表单的实现5.1 准备工作5.2 创建动态表单组件5.3 使用动态表单组件 …

在开发软件KEIL MDK和IAR开发工程里面打印行号、文件名、函数名、时间

最近应用固件没有时间记录&#xff0c;分别请那个是最新的&#xff08;在没有版本区别的情况下&#xff09;&#xff0c;有个办法记录编译时间即可&#xff0c;记录笔记以便查看 在软件工程里面直接用宏 __FILE __ 当前程序文件名的字符串 __FUNCTION __ 当前函数的名字字符串 …

2023年2月8日 Go生态洞察:Profile-Guided Optimization预览

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

优化的 MCM-GPU 比具有相同 SM 总数和 DRAM 带宽的同等配备的多 GPU 系统快 26.8%。

MCM-GPU: Multi-chip-module GPUs for Continued Performance Scalability 抽象&#xff1a; 从历史上看&#xff0c;基于 GPU 的高性能计算的改进与晶体管缩放紧密相连。随着摩尔定律的减慢&#xff0c;每个芯片的晶体管数量不再以历史速度增长&#xff0c;单个单片GPU的性能…

易点易动设备管理系统--提升设备能耗管理效率的工具

在当今的节能环保意识日益增强的社会背景下&#xff0c;设备能耗管理成为了市场推广人员关注的焦点之一。为了帮助市场推广人员提升设备能耗管理效率&#xff0c;易点易动设备管理系统应运而生。本文将详细介绍易点易动设备管理系统的功能和优势&#xff0c;以及如何借助该系统…

Python-元组详解

注意&#xff1a;列表是方括号【】&#xff0c;元组是圆括号&#xff08;&#xff09;&#xff0c;这里要分清。 创建元组 1、a () 2、b tuple() a () b tuple() 2、可以指定初始值 a (1,2,3,4) a (1,2,3,4) 3、元素可以是任意类型 a (1,2,3,4,hello) a (1,2,3,4…

2023年12月实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

免费,开源的充电站(充电桩)软件技术栈

关于 PIONIX&#xff1a; PIONIX 成立于 2021 年&#xff0c;总部位于德国巴特申博恩&#xff0c;已迅速成为该领域的推动者。PIONIX 牵头开发了 Linux 基金会能源项目 EVERest——一个尖端、免费、开源的充电站软件堆栈。值得注意的是&#xff0c;OCPP 是该计划的重要组成部分…

音视频之旅 - 基础知识

图像基础知识 像素 像素是图像的基本单元&#xff0c;一个个像素就组成了图像。你可以认为像素就是图像中的一个点。在下面这张图中&#xff0c;你可以看到一个个方块&#xff0c;这些方块就是像素 分辨率 图像&#xff08;或视频&#xff09;的分辨率是指图像的大小或尺寸。…