ahk系列-windows超级运行框-表达式计算(6)—asc/ord/chr ASCII 码转换

news2025/1/23 21:29:39

1、环境准备

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

2、使用方式

asc 可以计算 asc字符 ,或者汉字,的数值,ord /chr 则是把数值转换为字符

当然有很多字符不可见,比如我们用 “{}” 包裹它

_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}") ;退格
  1.    输入win+R打开windows运行框 
  2.    在运行框中输入:asc a  ,输出:“97” 
  3.    在运行框中输入:asc a b c ,输出 “97 98 99  ”,输出多个字符的asc码值,中间有空格
  4.    在运行框中输入:asc 你 好,输出 “20320 22909” ,可以计算汉字的编码
  5.    在运行框中输入:   ord 32 , 输出 “{空格}”  ,不可见字符参考上面代码
  6.    在运行框中输入:chr 97 ,输出 “a” chr和ord的功能一样的、但是不能对unicode还原。
  7.   表达式按== 触发结果

3、演示

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
;==========================================================================================================系统快捷键映射
;执行各种运算取值
class runbox
{
    ;执行比表达式计算,"==" 触发,callflag是其他函数调用该方法
    static calculateExpression(rawstr,callflag:=0)
    {
        ;计算字符的asc码值
        if inStr(rawStr,"asc ")==1{
            result:=this.ascOrChrExpression(trim(LTrim(rawStr,"asc")),1)
            fulltxt:= rawStr . "=" . result
            return fulltxt
        }
        ;计算数字所代表字符
        if inStr(rawStr,"ord ")==1 or inStr(rawStr,"chr ")==1{
            result:=this.ascOrChrExpression(Trim(LTrim(LTrim(rawStr,"ord"),"chr")),0)
            fulltxt:= rawStr . "=" . result
            return fulltxt
        }
    }
    ;计算asc码值
    static ascOrChrExpression(str,sacb)
    {
       str2:=RegExReplace(str,"\s+"," ")  ;让空格变小
       Loop parse ,str2 ," "{
         result .= (" " . ak.getAscOrChr(Trim(A_LoopField),sacb))
       }
       return result
    }
}
;==========================================================================================================系统快捷键映射
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ak工具类class
class ak
{
    ;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?(ak.maprget(_map,item) || ak.encodeUtf8(item)):(ak.mapget(_map,item) || chr(item))
    }
   ;通过value值来寻找key ,一般是一个key映射一个数组的时候,取数组中一个值来找key
   static maprget(mmap,value)
   {
      for k ,v in mmap{
         if (type(v)=="Array" and this.arrhas(v,value) )or(v==value){
            return k
          }
      }
      return
   }
    ;Func 帮助map获取值,优化原生map报错问题,ignoreCase是否忽略大小写
    static mapget(map1,key,ignoreCase:=0)
    {
        try{
          if ignoreCase{
            for k ,v in map1 {
                if k=key
                    return v
            }
          }
          return map1.get(key)
        }catch as e{
           return ""
        }
    }
   static encodeUtf8(str)
   {
        resultStr:=""
        Loop  Parse, str {
           resultStr:=resultStr . "\u" .  String(Ord(A_LoopField)>0x100 ? Format("{:04X}", Ord(A_LoopField) ):A_LoopField)
        }
        return resultStr
   }
}
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ak工具类class

5、总结

 由于很多操作代码可以复用,单个功能代码臃肿,

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

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

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

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

相关文章

软件测试之python+requests接口自动化测试框架实例教程

前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自动化框架,使用的…

元宇宙解决方案:GPU云服务在元宇宙中的作用

GPU算力可以说是我们现在信息化时代的基础设施,在某种程度上说我们已经进入了算力时代,手机、电脑、车载等算力已经渗透到各行各业了。 当然算力对元宇宙也很重要,尤其是在可视化方面,元宇宙需要很逼真的渲染,同时它的…

【8】PyQt单选框和复选框

目录 1. 单选框 2. 复选框 1. 单选框 QRadioButton是单选按钮,它提供了一组可供选择的按钮和文本标签,用户可以选择其中一个选项 单选框选中的信号是:toggled 代码示例: from PyQt5.QtWidgets import * from PyQt5.QtCore import * import sysdef func(checked…

校园教务管理系统

学年论文(课程设计) 题目: 信息管理系统 校园教务管理系统 摘要:数据库技术是现代信息科学与技术的重要组成部分,是计算机数据处理与信息管理系统的核心,随着计算机技术的发展,数据库技…

docker:安装mysql以及最佳实践

文章目录 1、拉取镜像2、运行容器3、进入容器方式一方式二方式三容器进入后连接mysql和在宿主机连接mysql的区别 持久化数据持久化数据最佳实践 1、拉取镜像 docker pull mysql2、运行容器 docker run -d -p 3307:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD123456 …

Python实现FA萤火虫优化算法优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法(Fire-fly algorithm,FA)由剑桥大学Yang于2009年提出 , …

意大利语翻译成中文怎样做比较好

近年来,中意两国传统友好,两国人民之间的交往源远流长,双方合作不断推进,国内市场对于意大利语翻译的需求日益增加。那么,意大利语翻译有何特点,意大利语翻译成中文怎样做比较好呢? 由于意大利语…

matlab实践(十):贝塞尔曲线

1.贝塞尔曲线 贝塞尔曲线的原理是基于贝塞尔曲线的数学表达式和插值算法。 贝塞尔曲线的数学表达式可以通过控制点来定义。对于二次贝塞尔曲线,它由三个控制点P0、P1和P2组成,其中P0和P2是曲线的起点和终点,P1是曲线上的一个中间点。曲线上…

Leetcode每日一题学习训练——Python3版(最小化旅行的价格总和)

版本说明 当前版本号[20231206]。 版本修改说明20231206初版 目录 文章目录 版本说明目录最小化旅行的价格总和理解题目代码思路参考代码 原题可以点击此 2646. 最小化旅行的价格总和 前去练习。 最小化旅行的价格总和 现有一棵无向、无根的树,树中有 n 个节点…

LeetCode Hot100 207.课程表

题目: 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习…

人工智能在警务工作中的运用

AI 能否帮助警察打击犯罪? 执法部门负责维护公共安全,他们必须处理随之而来的所有挑战。幸运的是,警察可以依靠技术来处理很多工作。近几年来,尤其是人工智能技术在全球变成了警务工作中的一个重要部分。 随着基于 AI 的警务技术…

如何在Java中实现多条件排序

文章目录 前言一、在Java中使用Comparator接口实现多条件排序二、视频讲解总结 前言 多条件排序是一个复杂而实用的技术问题,它涉及到算法、数据结构等多个领域。 在实际工作中,我们常常需要根据多个条件对数据进行排序,以达到最优化的效果。…

桶排序去重

题目&#xff1a; #include<stdio.h> int main() { int a[1001], n, i, t; for (i 1;i < 1000;i) { a[i] 0;//初始化 } scanf("%d", &n);//读入n for (i 1;i < n;i)//循环读入n个图书的ISBN号 { scanf(&…

ABAP 字符串空白值保留长度或者用其他字符替代

保留空白值在字符串的长度。 DATA lv_char1 TYPE string VALUE Hello. DATA lv_char2 TYPE string VALUE World. DATA LV_CHAR3 TYPE C LENGTH 50.DATA(lv_string3) |{ lv_char1 } { lv_char2 }!|.WRITE: / lv_string3.DATA(lv_string2) lv_char1 && | { lv_char3 } …

分库分表详解

分库分表很常见&#xff0c;但这些问题90%的人都答不全 分库分表&#xff0c;是企业里面比较常见的针对高并发、数据量大的场景下的一种技术优化方案&#xff0c;也是一个非常高频的面试题。但是&#xff0c;因为很多人其实并没有非常丰富的分库分表的经验&#xff0c;所以能把…

虚拟线程原理及性能分析

一、背景 JDK21 在 9 月 19 号正式发布&#xff0c;带来了较多亮点&#xff0c;其中虚拟线程备受瞩目&#xff0c;毫不夸张的说&#xff0c;它改变了高吞吐代码的编写方式&#xff0c;只需要小小的变动就可以让目前的 IO 密集型程序的吞吐量得到提升&#xff0c;写出高吞吐量的…

甘草书店:#8 2023年11月22日 星期三「“说一套做一套”的甘草与麦田」

最近与甘草书店的投资方和意向投资方沟通&#xff0c;听取了来自不同领域不同人群的观点。他们讲的都有道理&#xff0c;但他们说的都不是甘草。就像“麦田”成立之前&#xff0c;世间没有“麦田”一样&#xff1b;“甘草”出现之前&#xff0c;世间没有也没有“甘草”。 故事…

UDP多人群聊

一&#xff0c;创建类 二&#xff0c;类 1&#xff0c;Liao类 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String; public class Liao extends JFrame{ private static fi…

智慧景区(园区)数字孪生可视化GIS解决方案

随着技术的日新月异&#xff0c;景区日常管理及运营中使用到的智慧化工具越来越丰富&#xff0c;智慧化硬件设备也越来越多&#xff0c;而其中各个管理系统往往又是相互独立&#xff0c;形成一个个数据孤岛。智慧景区管理平台就是将各个孤岛中的数据及功能汇集起来&#xff0c;…

【数据结构】动态规划(Dynamic Programming)

一.动态规划&#xff08;DP&#xff09;的定义&#xff1a; 求解决策过程&#xff08;decision process&#xff09;最优化的数学方法。 将多阶段决策过程转化为一系列单阶段问题&#xff0c;利用各阶段之间的关系&#xff0c;逐个求解。 二.动态规划的基本思想&#xff1a; …