autohotkey函数 (一)

基本使用举例

定义

Add(x, y)
{return x + y   ; "Return" 期望 表达式.
}
调用
  • Var := Add(2, 3) ; 数字 5 将被保存到 Var.
  • Add(2, 3) ; 无返回值
注意

由于函数调用是 表达式, 在其参数列表中的任何变量名称都不应该括在百分号中. 与之相比, 原义的字符串应该括在双引号中.

if InStr(MyVar, "fox")MsgBox The variable MyVar contains the word fox.

最后, 可以在任何命令的参数中调用函数 (除了像 StringLen 的中的那些 OutputVar 和 InputVar 参数).
然而, 不支持 表达式 的参数必须加上 "% " 前缀, 例如:
MsgBox % "The answer is: " . Add(3, 2)
在原生支持表达式的参数中也允许加上 "% " 前缀, 不过它会被简单的忽略了

参数

定义函数时, 其参数都在其名称后面的括号中列出 (在其名称和开括号之间不能含有空格). 如果函数不接受任何参数,请把括号留空,例如:GetCurrentTimestamp()。

ByRef参数

从函数的角度看, 参数本质上是 局部变量, 除非它们被定义为 ByRef, 例如:

Swap(ByRef Left, ByRef Right)
{temp := LeftLeft := RightRight := temp
}

在上述例子中, ByRef 的使用让每个参数变成从调用者传递进来的变量的一个别名. 换句话说, 参数和调用者的变量都引用内存中相同的内容. 这样使得 Swap 函数可以通过移动 Left 的内容到 Right 中来修改调用者的变量, 反之亦然.
有点类似于C++中的引用

  • IsByRef() 函数可以用来判断调用者是否为指定的 ByRef 参数提供了变量。
  • 不能传递 Clipboard, 内置变量 或 环境变量 给函数的 ByRef 参数, 即使脚本中没有 #NoEnv 时.
  • 尽管函数可以递归调用它自己,但是如果它传递它自己的一个局部变量或非 ByRef 参数给自己的 ByRef,那么新一层的 ByRef 参数将引用它自己那个名称的局部变量而不是之前层的。然而, 当函数传递给它自己 全局变量, 静态变量 或 ByRef 参数时不会产生这样的问题.

可选参数

定义函数时, 可以把它的一个或多个参数标记为可选的. 这可以通过在参数后添加一个等号(在 v1.1.09+ 中还可以为 :=)跟着默认值完成. 后面的函数中其 Z 参数被标记为可选的:

Add(X, Y, Z:=0) {return X + Y + Z
}
注意

ByRef 参数 也支持默认值; 例如: Func(ByRef p1 = “”). 每当调用者省略这样的参数时, 函数会创建一个包含默认值的局部变量; 换句话说, 函数表现的就像关键字 “ByRef” 没有那样

可以使用对象和数组返回多值甚至是命名值

Test1 := returnArray1()
MsgBox % Test1[1] "," Test1[2]Test2 := returnArray2()
MsgBox % Test2[1] "," Test2[2]Test3 := returnObject()
MsgBox % Test3.id "," Test3.valreturnArray1() {Test := [123,"ABC"]return Test
}returnArray2() {x := 456y := "EFG"return [x, y]
}returnObject() {Test := {id: 789, val: "HIJ"}return Test
}

可变参数函数

Join(sep, params*) {for index,param in paramsstr .= param . sepreturn SubStr(str, 1, -StrLen(sep))
}
MsgBox % Join("`n", "one", "two", "three")
注意

调用可变参数函数时, 通过保存在函数的最后参数中的对象可以访问剩余的参数. 函数的首个剩余参数在 params[1], 第二个在 params[2] 等等. 和所有的标准对象一样, 使用 params.MaxIndex() 可以确定最大的索引值 (这里为参数的数目). 但是如果没有参数, MaxIndex 会返回空字符串.

“可变” 参数只可以出现在形式参数列表的末尾.

autohotkey 函数相关推荐

  1. aardio + AutoHotkey 混合编程

    本文主要介绍 aardio + AutoHotkey 混合编程. 在 aardio 中可以调用很多编程语言,例如 C语言.C++.C#.Java.Python.R.Javascript.Node.Js ...

  2. 脚本命令远程访问计算机,在远程电脑上执行任意命令 (利用 Autohotkey ahk http 服务器)...

    经常会有个需求,就是在远程电脑上执行命令.如果远程电脑是windows系统的话,系统自带的工具mstsc和telnet应该可以实现这个要求,不过用起来都不是很方便. 最好的效果是,能像运行本地命令一样 ...

  3. AutoHotkey热键脚本语言文件

    ;=== AutoHotkey热键脚本语言文件 autoHotkey.ini 从此行开始 === The Sart Line Of autoHotkey.ini AutoHotkey ScriptFi ...

  4. AutoHotKey Script解密

    1.此程序采用UPX加壳,Script解密前会进行CRC32校验,校验码存放于文件最后一个双字,因此最好是带壳解密 2.它会全文件搜索AutoHotKey的特征串A3 48 4B BE-98 6C 4 ...

  5. 继续分享最新版本的autohotkey自己编写的快捷键

    Netdelay=700;这种全局定义要写在所有代码的前面才能让所有代码起作用. SetCapsLockState , AlwaysOff SetNumlockState, AlwaysOn Grou ...

  6. AutoHotKey写一个改键的小脚本

    应D君邀请写一个小的改键软件,用了一上午选择使用的脚本语言,下午开始去写.晚饭的时候,基本的功能完成了.先所说我要完成的脚本的功能吧.软件有一定编程基础的D君用,用户比较特定,功能越简单越好.因此,软 ...

  7. AutoHotKey 新手入门教程

    AutoHotKey 真是一个好玩的工具!短短几行代码就是先了"窗口置顶"."窗口透明"等功能,之前我还特意为此装了好几个小工具,现在都可以卸掉了.闲来无事,就 ...

  8. AutoHotKey简单入门

    简单入门 快捷键 ^j::Send, Hello world! Return ^j::代表Ctrl+J,其中^代表Ctrl键 Send命令:在光标处输入Hello world! 也就是说,你按下Ctr ...

  9. autoHotkey — 连击/双击/重复 按键触发

    文章目录 autoHotkey - 连击/双击/重复 按键触发 基本环境 为什么要做这个事情 代码 autoHotkey - 连击/双击/重复 按键触发 基本环境 autohotkey SciTE4A ...

最新文章

  1. 为什么像王者荣耀这样的游戏 Server 不愿意使用微服务?
  2. VC字体安装相关方法总结
  3. wxpython 日志显示框_wxpython与logging模块结合显示实时日志
  4. Cracking Wifi Wpa-Wpa2 in 5 second——Dumpper V.80.8 +JumpStart+WinPcap
  5. 深度学习语音识别方法概述与分析
  6. 【有利可图网】PS实战系列:PS+SAI把照片制成唯美手绘效果
  7. 低电平译码器LS138设计
  8. Oracle常用文档整理
  9. 飞机大战学习心得(Dev-C++)
  10. CUDA编程 -- 2向量加法
  11. nbu客户端卸载_在LINUX系统下如何卸载NetBackup
  12. Java虚拟机-JVM
  13. 奇偶校验,异或校验,和校验,nios串口校验
  14. 主导资源公平DRF:多种资源类型的公平分配
  15. 在 DataFrame 多列数据中模糊查找匹配数据
  16. linux ac3165驱动下载,驱动程序无线网卡固件( 英特尔 3165 iwlwifi ) 仅适用于内核 4.1 +: 在内核 3.19的办法?...
  17. 【Java设计模式】:行为型模式—访问者模式
  18. python dll注入监听_注入方式,劫持dll注入的实现
  19. 【应急响应】windows入侵排查思路
  20. 【Linux】孤儿进程 | 环境变量 | 命令行参数 | 进程优先级

热门文章

  1. 深度学习优化算法的总结与梳理(从 SGD 到 AdamW 原理和代码解读)
  2. 无人机自由飞行测试台 FFT GYRO 2000
  3. 基于CUDA的GPU并行计算技术实现网课课表编排
  4. 队列的定义及其基本操作
  5. 19c 单实例打补丁
  6. DM8在银河麒麟服务器上配置Oracle19c的DBLINK服务
  7. 独立按键之长按、短按、单击、双击
  8. 反演地表温度空白或者是DN值无穷大+公式
  9. 比特(bits),符号(symbol),码片(chips)区别
  10. 纳尼?华为首席架构师只用434页笔记,就将网络协议给拿下了