ahk系列-windows超级运行框-表达式计算(1)—get取值

1、环境准备

  1. windows 7,8,10,11操作系统
  2. ahk 2.x_64位

2、使用方式

get 表达式 可以获取配置文件getconfig.txt中配置的值,get可以计算“[ ]”中的表达式

也可以获取用户,系统的环境变量,或者是path 

只获取 环境变量或是path也可以用表达式 getpath

在当前脚本下面配置文件 getconfig.txt

#####################################################################################################
#如果是1开头则后面表达式中的"[ ]"的值需要计算 ,[ ]中支持+-*/^等表达式,[]中数据会整体乘倍数
#大小写敏感
###ahk映射
ctrl=^
alt=!
win=#
shift=+####时间换算
1天=[24][h] [24*60][min] [24*60*60][s] [864]w[ms]
1h=[1/24][天] [60][min] [60*60][s] [36]w[ms]
1min=[1/24/60][天] [1/60][h] [60][s] [0.6]w[ms]
1s=[1/24/60/60][天] [1/60/60][h] [1/60][min] [100][ms]
1ms=[1/24/60/60/100][天] [1/60/60/100][h] [1/60/100][min] [1/100][s]###计算存储
1GB=[1024][MB] [1024*1024][KB] [1024*1024*1024][字节] [1024*1024*1024*8][byte]
1MB=[1/1024][GB] [1024][KB] [1024*1024][字节] [1024*1024*8][byte]
1KB=[1/1024/1024][GB] [1/1024]MB [1024][字节] [1024*8][byte]
1Byte=[1/1024/1024/1024][GB] [1/1024/1024][MB] [1/1024][KB] [8][byte]
1byte=[1/1024/1024/1024/8][GB] [1/1024/1024/8][MB] [1/1024/8][KB] [1/8][字节]###计算单位
1英里=[1.609344] (km) [0.8689762] (海里)
1km=[0.6213712] (英里) [0.5399568] (海里)
1海里=[1.852] (km) [1.1507794] (英里) [1](节)
1节=[1.852] (km) [1.1507794] (英里) [1](海里)
1英寸=[2.54] (cm) [0.0254] (m) [0.762] (寸)
1磅=[0.4536] (kg) [453.6] (g) [0.972] (斤)
1寸=[10/3] (cm) [1/30] (m)
1尺=[1/3] (m) [100/3] (cm)
1亩=[2000/3](m²)
1公顷=[15](亩) 长[100](m) 宽[100](m)
1m/s=[3.6](km/h) [1/340]马赫
1km/h=[1000/3600](m/s) [1000/3600/340]马赫
1马赫=[340](m/s) [340*3.6](km/h)###计算热量
1kj=[0.2389] (大卡) [238.9] (卡)
1大卡=[4.1858] (千焦)  [4185] (焦)###12时辰
子时= 23:00-1:00
丑时= 1:00-3:00
寅时= 3:00-5:00
卯时= 5:00-7:00
辰时= 7:00-9:00
巳时= 9:00-11:00
午时= 11:00-13:00
未时= 13:00-15:00
申时= 15:00-17:00
酉时= 17:00-19:00
戌时= 19:00-21:00
亥时= 21:00-23:00###常量
光速=[2.99792458]亿(m/s) [29.9792458]万(km/s)
  1.    输入win+R打开windows运行框 
  2.   在运行框中输入:get ctrl  ,输出:“^”  ,获取固定值
  3.   在运行框中输入:get 24h ,输出:“1[天] =1440[min] =86400[s] =864w[ms]” ,获取动态值
  4.   在运行框中输入:get java_home 输出:“D:\jdk1.8_x64(用户)” ,获取环境变量
  5.   表达式按== 触发结果

3、演示

windows超级运行框-表达式计算(1)—get取值

 4、代码

#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
;==========================================================================================================系统快捷键映射
;----------------------------------------------------------------------------------------------------------运行框rubox 类 class
;执行各种运算取值
class runbox
{static getconfigPath:=A_ScriptDir "\getconfig.txt";执行比表达式计算,"==" 触发,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}};计算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 . "(用户)":"")}
}
;----------------------------------------------------------------------------------------------------------运行框rubox 类 class
;----------------------------------------------------------------------------------------------------------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{;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 作用:处理大的数字,;参数: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 帮助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 ""}};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};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}
}
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ak工具类class

5、总结

由于很多代码可以复用,单个功能看上去代码很多,

完整功能参考: windows超级运行框-表达式计算(12)汇总

各位大佬觉得还可以怎么get? 欢迎评论区留言讨论!

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

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

相关文章

从零开始:同城O2O外卖APP的技术开发指南

随着互联网的迅速发展&#xff0c;O2O&#xff08;OnlinetoOffline&#xff09;模式在各个行业都取得了巨大成功&#xff0c;而同城外卖APP更是成为人们生活中不可或缺的一部分。本文将从零开始&#xff0c;为您提供一份同城O2O外卖APP的技术开发指南&#xff0c;让您能够深入了…

家政小程序源码,师傅竞价接单

家政预约上门服务小程序开发方案&#xff0c;php开发语言&#xff0c;前端是uniapp&#xff0c;有成品源码&#xff0c;可以二开&#xff0c;可以定制。 一家政小程序用户端功能&#xff1a;服务分类、在线预约、在线下单。 师傅端&#xff1a;在线接单&#xff0c;竞价&…

用C语言实现链栈的基本操作

#include <stdio.h> #include <malloc.h> #define ElemType char//相当于ElemType等同于char类型 //链式结构 数据域指针域 typedef struct LinkStackNode//定义一个链栈的结构体类型 {ElemType data;//ElemType是链栈的元素类型&#xff0c;代表数据域struct Lin…

在JSP项目中编写一个接口返回JSON 供JSP界面异步请求数据

首先 我们要引入json处理的依赖工具 在 pom.xml文件的 dependency 标签中加入如下代码 <dependency><groupId>com.googlecode.json-simple</groupId><artifactId>json-simple</artifactId><version>1.1.1</version> </dependenc…

mockito加junit实现单元测试笔记

目录 一、简介1.1 单元测试的特点1.2 mock类框架使用场景1.3 常用mock类框架1.3.1 mockito1.3.2 easymock1.3.3 powermock1.3.4 JMockit 二、mockito的单独使用2.1 mock对象与spy对象2.2 初始化mock/spy对象的方式初始化mock/spy对象第1种方式初始化mock/spy对象第2种方式初始化…

新版idea创建maven项目时的下载问题

新版idea创建时没有一个直接的maven选项 而是一个Maven Archetype选项&#xff0c;我们只需要选择它也是一样的&#xff0c;后面跟着选就行 配置国内下载源的方法如下&#xff1a; 1. 2. 3. 代码&#xff1a; <mirror> <id>alimaven</id> <name>al…

dell服务器安装PERCCLI

因在linux 系统中无法查看系统磁盘的raid级别&#xff0c;也无法得知raid状态&#xff0c;需要安装额外的包来监控&#xff0c;因是dell服务器&#xff0c;就在dell网站中下载并安装 1、下载链接&#xff1a;驱动程序和下载 | Dell 中国https://www.dell.com/support/home/zh-…

【评论送书】一本书讲透Java线程:原理与实践

摘要&#xff1a;互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流量洪峰&#xff0c;背后都离不开多线程技术的支持。在数字化转型的过程中&#xff0c;高并发、高性能是衡量系统性能的核心指…

流程画布开发技术方案归档(G6)

&#x1f3a8; 在理想的最美好世界中&#xff0c;一切都是为最美好的目的而设。 —— 伏尔泰 如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 一、技术选型 •从可维护性和可拓展性出发 •基本满足 1&#xff1a;链接: https://github.com/hukaibaihu/vue-org…

如何在报表工具 FastReport Cloud 中使用 ClickHouse

FastReport Cloud 是一项云服务 (SaaS)&#xff0c;旨在为您的企业存储、编辑、构建和发送报告。您的整个团队可以从世界任何地方访问这些报告&#xff0c;并且无需创建自己的应用程序。 FastReport Cloud 试用&#xff08;qun&#xff1a;585577353&#xff09;https://chat8.…

Linux C语言 39-进程间通信IPC之管道

Linux C语言 39-进程间通信IPC之管道 本节关键字&#xff1a;C语言 进程间通信 管道 FIFO 相关库函数&#xff1a;pipe、mkfifo、mknod、write、read 什么是管道&#xff1f; 管道通常指“无名管道”&#xff0c;是Unix系统中最古老的IPC通信方式。 管道的分类 管道&#…

2023下半年软件设计师 关于我用了半个月过了软件设计师这件事

前言 废话不多说、看图喽。刚可以查询、我就赶紧去查成绩 上午成绩是57分、下午成绩是45分。下午成绩刚好踩着及格线 有关备考 我是在工作之余外进行的备考、备考前前后后花了半个月。但是备考的很仓促、每天下班都要搞到十一二点。早上赶班车也在刷题&#xff0c;吃饭的时候也…

【JavaEE】生产者消费者模式

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

期末速成数据库极简版【分支循环函数】(4)

目录 全局变量&局部变量 局部变量定义declare 局部变量赋值select 局部变量赋值select 【1】分支结构IF 【2】分支结构CASE 简单CASE语句 搜索CASE语句 【3】循环结构While 【4】系统函数 常用字符串函数 时间函数 【5】自定义函数—标量函数 函数创建 函…

如何学习Java并发编程

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 2012年我刚转行到互联网…

定义一个学生类,其中有3个私有数据成员学号、姓名、成绩,以及若于成员。 函数实现对学生数据的赋值和输出。

#include <stdio.h> // 定义学生类 typedef struct Student { int stuNum; // 学号 char name[20]; // 姓名&#xff0c;假设最长为20个字符 float score; // 成绩 } Student; // 初始化学生信息 void initializeStudent(Student *student, int num, const…

Office Tool Plus 使用教程 让个人也能轻松使用上免费的Office

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…

接雨水-困难

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a;输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表…

忘记PDF密码了,怎么办?

PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密&#xff1f; PDF和office一样&#xff0c;可以对文件进行加密&#xff0c;但是没有提供恢复密码的功…

优雅草蜻蜓I即时通讯·水银版私有化部署之安卓Android端编译-02

Android 项目配置 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 使用以上Android studio版本 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 下载最低sdk最低版本28 完成后就可以导入项目(项目导入不能开VPN,会导致部分三方库…