AutoHotKey脚本初步:判断和选择

news/2024/10/3 19:52:35

文章目录

    • 脚本基础
    • 连击识别
    • setTimer
    • 判断和选择

脚本基础

尽管通过窗口识别与按键映射,就可以胜任很多工作了,但AutoHotKey仍提供了一些简单的编程功能,对一些稍微复杂的任务,也可以做到得心应手。但要注意一点,AHK的V1和V2在语法上有很大差异,接下来所有内容,均适用于V2版本。

ahk中,通过;进行单行注释,通过\**\进行多行注释,而且多行注释符号只有出现在首行时才有效。

从编程的角度来说,任何编程语言都有变量,AHK亦然,但在AHK中,变量不需要声明,且变量名不区分大小写。尽管提供了字符串、数值、布尔等数据类型,但不同类型之间可自由转换,什么时候用什么类型完全视情况而定。其中,数值支持整型和浮点型,且以0x开头的整型表示十六进制。

连击识别

下面写一个简单的脚本热个身,下面这段脚本的含义是,当连续点击不同次数的大写键之后,分别弹出相应的信息

CapsLock::
{globalif (A_ThisHotkey != A_PriorHotkey){num := 1return}num += 1SetTimer MultiPresses, -500Return
}; 弹出连击次数
MultiPresses(){globalMsgBox "点击" . num . "次"num := 0 ; num清零Return
}

其中,global表示开启全局模式,从而让num这个变量不局限于某个作用域。

A_ThisHotkeyA_PriorHotkey是内置变量,前者表示最近执行的热键,后者表示上一次执行的热键。

所以if语句表示,如果这一次点击的按键与上一次不同,那么说明只点击了一次CapsLock,故而将num设为1,然后退出。否则,说明上一次点击的也是CapsLock,所以num要加1。

最后调用了SetTimer函数,表示在500毫秒内如果没再按键,那么就执行MultiPresses这个函数。

MultiPresses中,弹出一个MsgBox,后面的%num%表示提取num这个变量的值,最后重置num的值。

其效果为

在这里插入图片描述

setTimer

setTimer可在指定的时间间隔内自动重复调用函数,其使用方法为

SetTimer Function, Period, Priority

其中Function即被调用的函数,Period的含义与其取值有关

  • 大于 0,定时器将自动重复,直到脚本明确禁用
  • 小于 0,定时器将只运行一次,上面的案例中,-500表示将在500ms后调用Function, 然后删除定时器。
  • 如果为0,则直接删除这个定时器。

最后一个参数Proirity表示优先级,如果只输入两个参数,则轮不到Proirity

判断和选择

在上面这个脚本中,用到了if表达式,这几乎是所有编程语言必备的分支语句了,表示判断,而且写法也高度相似,在AHK中,完整的表达式如下,如果花括号中是单行语句,则花括号可以省略。

if(){}
if(){}
else{}

此外,AHK支持switch...case语句,其语法格式为

switch SwitchValue, CaseSense
{
case CaseValue1:Statements1
case CaseValue2a, CaseValue2b:Statements2
default:Statements3
}

仍以连击为例,可将上式改写为

CapsLock::
{globalif (A_ThisHotkey != A_PriorHotkey){num := 1return}num += 1SetTimer MultiPresses, 500Return
}MultiPresses(){globalswitch num{case 2: MsgBox "您点击两次"case 3: MsgBox "您点击三次"case 4: MsgBox "您点击四次"default: MsgBox "您点击许多次"}num := 0 ; num清零Return
}

https://dhexx.cn/news/show-4628114.html

相关文章

java关于泛型相关面试题开胃菜

Java中的泛型机制及其用途? Java中的泛型机制是一种允许在编译时检查类型安全的技术。它允许在编写代码时使用类型参数,以便在编译时指定或推断这些参数的类型。这个机制允许程序员编写出更加通用、可重用的代码,从而提高代码的质量和可维护…

深度学习防止过拟合

简化模型减少数据early stop使用预训练模型

Payroll工资单中英文对照明细

不知道大家的工资单是中文的还是英文的,如果是英文的,刚开始看有些看不懂(我就是),那么可以在这里找到对应的翻译。如果中文的,而你又想知道对应英文怎么写的话,也欢迎查阅以下表格。ps.个人所得…

Linux 实操篇-网络配置

Linux 实操篇-网络配置 Linux 网络配置原理图 查看网络IP 和网关 查看虚拟网络编辑器和修改IP 地址 查看网关 查看windows 环境的中VMnet8 网络配置(ipconfig 指令) 查看linux 的网络配置ifconfig ping 测试主机之间网络连通性 基本语法 ping 目的主机(功能描述…

Java企业级信息系统开发学习笔记14 Spring Boot(使用Spring Initializr方式构建Spring Boot项目)

文章目录 一、使用Spring Initializr方式构建Spring Boot项目(一)创建Spring Boot项目(二)创建控制器(三)运行入口类(四)访问Web页面(五)修改访问映射路径 一…

Java面向对象程序开发——基础

文章目录 前言类和对象类对象 构造方法匿名对象变量作用域this关键字总结 前言 提示:这里可以添加本文要记录的大概内容: Java 是一种以面向对象编程为基础的编程语言 在 Java 编程中,一切皆为对象 每个对象都有其自己的属性和方法 对象可以…

代码随想录算法训练营第二十四天 | 理论基础,77. 组合

代码随想录算法训练营第二十四天 | 理论基础,77. 组合 1.1 理论基础 组合:N个数里面按一定规则找出k个数的集合分割:一个字符串按一定规则有几种切割方式子集:一个N个数的集合里有多少符合条件的子集排列:N个数按一定…

二叉树的链式结构 - C语言(含有大量递归)

目录: 🍔前言 🍔二叉树链式结构的实现 🍟基本构架 😍代码: 🍔二叉树的遍历 🍟前序遍历 🍟中序遍历 🍟后序遍历 🍟层序遍历 &#x1f53…

前端Rust开发WebAssembly与Swc插件快速入门

前言 现代前端对速度的追求已经进入二进制工具时代,Rust 开发成为每个人的必修课。 一般我们将常见的前端 Rust 开发分为以下几类,难度由上至下递增: 开发 wasm 。 开发 swc 插件。 开发代码处理工具。 我们将默认读者具备最简单的 Rus…

python学习-进阶基本知识点总结

(一)正则表达式 1、正则表达式 字符类 [abc]:匹配 “a”、“b” 或 “c” 中的任意一个字符。abc:除了 “a”、“b” 和 “c” 以外的任何字符。[a-z]:匹配任何小写字母。[A-Z]:匹配任何大写字母。[0-9]&…