AutoHotKey-study

news2024/11/19 1:25:53

目录

  • 使用编辑器
  • 脚本注意
  • 函数解释
  • 信息调试方法
  • 键盘获取方法
  • 脚本练习

最近发现常用键盘的上下左右箭头去操作输入输出问题感觉很不是滋味,不像Linux那样,有vim的使用,就想着有没有什么方法更快捷,更方便的去使用电脑键盘,稍微搜索了一番,发现了这个强大的脚本工具 autohotkey

ahk帮助文档

使用编辑器

adventure
是autoahk编辑器的升级
快捷键
注释:ctrl + q
复制一行:ctrl +

#SingleInstance
确定脚本已在运行时是否允许再次运行.

~
添加这个符号后,激发热键时, 不会屏蔽(被操作系统隐藏) 热键中按键原有的功能。

SetTitleMatchMode :定义wintitle的的模式
1: 默认行为. 窗口标题必须以指定的 WinTitle 开头才能匹配.
2: 窗口标题的任意位置包含 WinTitle 才能匹配.
3: 窗口标题必须和 WinTitle 完全一致才能匹配.

脚本注意

  1. 跳过对话框, 自动替换旧实例.

    #SingleInstance force
    #NoEnv	;启用环境变量
    
  2. 热字串:使用空白时还会出现
    O,(omit)表示忽略终止符,即不需要使用空白终止符;
    R,原样输出;
    C,区分大小写;
    b0,不会删除原字符

    :*b0:<font>::
        </font>{left 8}{Space}color{space}={space}`“`”{Right}
    #<font color = ""></font>

  3. Send

    • 只有一行代码时,v1和v2都可以简写
    • 在v2使用{}包含多行代码,在v1版本只需用return返回即可
    • 在v2中的send需用双引号包裹,为字符串,在v1中不需要双引号包裹
      当使用热键输出文本时,会遇到如下情况
          v1:按下a键忽略a的输出
          v2:按下a键在a后循环输出
          按下b时,出现对应的内容
      a:: {
      send "baceh"
      }
      $b:: send "bcbbd"
      
      综上:使用$可以将字符串原内容输出
  4. 禁用按键

    >#:: return	;禁用 → win键
    hotkey, a, 标签
    hotkey, a, off
    return
    标签:
    	msgbox, a
    return
    
  5. autohotkey有宏录制功能
    录制页面

  6. 脚本流程中,多次创建同一个热键,热键功能指向最后一次代码运行的指向标签,最终执行为3

    hotkey, a, 标签1
    hotkey, a, 标签2
    hotkey, a, 标签3
    return
    标签1:
        msgbox, 1
    return
    标签2:
        msgbox, 2
    return
    标签3:
        msgbox, 3
    return
    
  7. 热键嵌套

    ; 按下a/b/c任意一个键,输出l
    a::				|		a::
    b::				|		b::
    c::send, l		|		c::			; %A_ThisHotkey% 保存了本次按下的热键
    				|			send l
    				|		return
    
  8. 添加钩子,防止热键冲突

    ; 加钩子前	直接输出lll
    1::send, a
    a::msgbox, lll
    
    ; 加钩子后	不会发生冲突
    1::send, a
    $a::msgbox, lll
    

函数解释

  • Click [ Options ]
    Options:Coords, WhichButton, ClickCount, DownOrUp 和/或 Relative. 如果省略所有项目, 在鼠标光标的当前位置执行单次左键点击.

    Coords:如果省略, 则使用鼠标的当前位置. 否则, 请指定在点击前, 鼠标光标要移动到的 X 和 Y 坐标. 例如, Click “100 200” 在特定位置点击鼠标左键. 坐标相对于活动窗口的客户端区域, 除非曾使用 CoordMode 更改了这个设置. 如果省略, 则使用光标的当前位置.

    CoordMode "ToolTip", "Screen"
    

    WhichButton:默认为 Left. 可指定 Left, Right, Middle(或只是这些名称的首字母); X1(第四个按钮) 或 X2(第五个按钮). 例如, Click “Right”

    Relative:相对当前鼠标位置

  • inf := InputBox([Prompt, Title, Options, Default]):输入对话框

    Prompt:提示文本
    Title:标题
    Options:类型,eg:Password
    inf.value(获取对象输入的文本)
    inf.result(获取对象输入框的返回值),输入框是如何关闭的: OK, Cancel 或 Timeout.

  • KeyWait, KeyName [, Options]:等待按键的状态
    Options
    为空,表示无限期等待;
    D: 等待按键被按下
    T: 超时(例如 T3). 超时前等待的秒数, 超时后设置 ErrorLevel 为 1.

  • Run, Target [, WorkingDir, Options, OutputVarPID]
    RunWait, Target [, WorkingDir, Options, OutputVarPID]
    Options
    省略, 命令正常运行 Target, 并且当 Target 不能启动时显示警告对话框.
    Max: 最大化运行
    Min: 最小化运行
    Hide: 隐藏运行(不能和上面任意一个选项组合使用)

  • Winset(对指定的窗口进行各种设置)
    内容太长,其帮助文档传送

  • SetKeyDelay:设置每次Send系列的延迟

信息调试方法

  • msgbox
  • listvars
  • outputdebug

键盘获取方法

  1. 双击/open脚本

  2. view – key history and script info
    SC:键盘的Scan Code
    VK:键盘的Virtual Key

    图示

  3. 使用PrintScreen键盘输出内容12345

    SC137::Send 12345
    VK2c::Send 12345
    

脚本练习

  • click命令

    #SingleInstance Force
    CoordMode "Mouse","Screen"
    
    f1:: {
    Click 1919,716,0
    Click 1879,20
    Sleep 3000
    Click 1622,161
    Sleep 1000
    Click 1616,78
    }
    
  • send,合并单元格

    #SingleInstance Force
    CoordMode "Mouse","Screen"
    
    ; 拆分单元格
    f1:: {
        send "{alt}"
        send "h"
        Sleep "200"
        send "m"
        Sleep "200"
        send "u"
    }
    
  • 允许用户输入电话号码.

    IB := InputBox("Please enter a phone number.", "Phone Number", "w640 h480")
    if IB.Result = "Cancel"
        MsgBox "You entered '" IB.Value "' but then cancelled."
    else
        MsgBox "You entered '" IB.Value "'."
    
  • 鼠标在最上面改变音量

    #SingleInstance Force
    CoordMode "Mouse","Screen"
    
    ;MouseGetPos &x, &y
    ;w::
    ;{		;获取坐标位置
    ;MouseGetPos &xpos, &ypos 
    ;MsgBox "The cursor is at X" xpos " Y" ypos
    ;}
    
    ~WheelUp::{
        MouseGetPos &x, &y
        if (y==0){
            Send "{Volume_Up}"
        }
    }
    ~WheelDown::{
        MouseGetPos &x, &y
        if (y==0){
            Send "{Volume_Down}"
        }
    }
    
  • 关闭视窗

    #SingleInstance Force
    ;CoordMode "Mouse","Screen"
    
    ;使用ctrl alt f4关闭所有相同视窗
    ^!f4::
      ; 视窗存进 sClass
      WinGetClass, sClass, A
      ; 关闭相同的类视窗
      while WinExist("ahk_class " . sClass) {
        WinClose
      }
    return
    
    ;使用鼠标左键和esc关闭当前窗口
    ~LButton & Escape::
        WinGetActiveTitle ,title
        Winclose %title%
    return
    
    #n:: run notepad
    
  • 音量控制

    !NumpadAdd:: Send {Volume_Up} ;//Alt + numpad plus
    !NumpadSub:: Send {Volume_Down} ;//Alt + numpad minus
    !Numpad0::Send {Volume_Mute} ;//Alt + numpad 0 
    
  • 语音报告今日时间

    !F2::
      date = %A_YYYY%%A_MM%%A_DD%Speak("今天日期是 " . date)
      time = %A_Hour%%A_Min%%A_Sec%Speak("现在时间是 " . time)
      return
      
    Speak(say) {
      spovice:=ComObjCreate("sapi.spvoice")
      spovice.Speak(say)
    }
    
  • 获取当前鼠标颜色

    !a::
      MouseGetPos, MouseX, MouseY
      PixelGetColor, color, %MouseX%, %MouseY%, RGB  
      Clipboard := "#" . SubStr(color, 3)	;color = 0x...... 
      MsgBox, Current color is `n %Clipboard%
      return
    
  • 按下鼠标中轮回到上层目录,在推特切下一个推文

    ~MButton::
      WinGetClass,sClass,A
      ;//MsgBox class=%sClass%
      ;//FM=7-zip window, TFcFormMain=FreeCommander
      if (sClass="TFcFormMain" || sClass="FM" || sClass="MultiCommander MainWnd") {
        Send, {BS}
      } else if (sClass="CabinetWClass") {
        Send, !{up}     ; 回向上一层目录
      } else if (sClass="MozillaWindowClass" || sClass="Chrome_WidgetWin_1") {
        WinGetTitle, sTitle, A
        ;//MsgBox title=%sTitle%
        if (InStr(sTitle, "Gmail") > 0) {
          Send {j}
        } else if (InStr(sTitle, "Twitter") > 0) {
          Send {j}  ; 下一个推特
        }
      } 
      return
    
  • 连续按2次Esc关闭当前视窗

    ~Esc::
    Keywait, Escape, , t0.5		; KeyWait读取键盘输入,如果0.5秒内不是按Escape则结束
    if errorlevel = 1
      return
    else
      Keywait, Escape, d, t0.1
      if errorlevel = 0		; 0.5秒内按了Escape,则再读第二个按键,若为Escape则关闭视窗
        {
        WinGetActiveTitle, Title
        WinClose, %Title%
        return
        }
      return	;若第二个按键不为Escape则结束
    
  • 批量删除视窗

    #SingleInstance Force
    SetTitleMatchMode 2	; 设置wintitle的匹配模式
    
    #n::
      run notepad
      Return
      
    ^!f4::
      WinGetTitle sTitle, A
      ; MsgBox %sTitle%
      ; InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]
      InputBox sTitle, 视窗标题, 输入视窗标题名, , 300, 150, , , , , %sTitle%
      if (sTitle = "nb") {
          sTitle := "记事本"  ;; 或 sTitle = 记事本
      } else if (sTitle = "ie") {
          sTitle := "Internet Explorer"
      }
      while WinExist(sTitle)
        WinClose
      Return
    
  • clipboard剪切功能

    ^+g::
    	current_clipboard = %Clipboard%		;把当前剪切板内容存储起来,剪切内容为文本
    	send ^c		; 复制字符串存入剪切板
    	Clipwait,1	; 等待剪切板包含数据
    	Run http://www.google.com/search?h1=zh&q=%Clipboard%
    	Clipboard = %current_clipboard%		; 将剪切板内容恢复
    
  • 截图工具的使用
    snippingtool

    !4::
    	run,"%A_WinDir%\system32\Snippingtool.exe"
    	sleep ,500
    	WinActive, "Snipping Tool"
    	send ,!m
    	send ,r		; 矩形截图
    	;send f		; 任意截图
    	return
    
    #Persistent
    RunWait, %ComSpec% /c dir C:\ >>C:\DirTest.txt, , Min	; 程序运行结束后才向下运行	ComSpec,为cmd
    Run, C:\DirTest.txt
    Run, properties C:\DirTest.txt
    
  • 对当前窗口的操作
    https://autohotkey.top/zh-cn/docs/commands/WinSet.htm#Examples

  • 设计开关

    1. 按下一个按键启动,在按一次停止
      ; 单击a,连续点鼠标左键,再次单击,取消点击
      	a::settimer, 循环a功能标签, % (开关变量 := !开关变量) ? 1 : "off"
      循环a功能标签:
          send, {Lbutton}
      return
      
      F1::
      if (onoff := !onoff)
          MsgBox, 布尔值为%onoff%`n第一次开
       else
          MsgBox, 布尔值为%onoff%`n第二次关
      Return
      
    2. 分离式开关设计
      F1::
      	F1onoff := !F1onoff, F2onoff=0
      	SetTimer F2循环, Off
      	SetTimer F1循环, % F1onoff=0 ? "Off" : 50
      	ToolTip
      return
      F2::
      	F2onoff := !F2onoff, F1onoff=0
      	SetTimer F1循环, Off
      	SetTimer F2循环, % F2onoff=0 ? "Off" : 50
      	ToolTip
      return
      F1循环:
      	ToolTip F1循环%F1onoff%
      return
      F2循环:
      	ToolTip F2循环%F2onoff%
      return
      
  • 设计markdown文档快速标题

    ^1::
    ^2::
    ^3::
    ^5::
    ^6::
    	numHashes := Substr(A_Thishotkey, 2)	; "^1" -> "1"
    	Markdown_title(numHashes)
    	return
    
    Markdown_title(numHashes){
    	Clipboard := ""
    	sendInput {home}
    	sendInput {SHIFT}+{End}
    	sleep 200
    	Clipwait ,1		; 等待剪切板包含数据
    	text := Clipboard
    	text := RegExReolace(text, "^#{1,6}\s(.*)", "$1")
    	SendInput {del}
    	SendInput {home}{# numHashes}{End}
    }
    
  • 常用热键整理
    https://www.autoahk.com/archives/36311#H2-12

  • 微知识点整理
    https://www.autoahk.com/archives/9195

参考:
    基础到精通
    文档

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

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

相关文章

【开源】基于Vue和SpringBoot的社区买菜系统

项目编号&#xff1a; S 011 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S011&#xff0c;文末获取源码。} 项目编号&#xff1a;S011&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1…

浅谈抄表环境对抄表质量的影响

众所周知&#xff0c;抄表环境对抄表质量影响是不言而喻的。不仅影响着营销“三率”&#xff0c;还影响着企业的社会形象。尽管&#xff0c;随着水表出户、物联网技术的发展&#xff0c;抄表环境得到很大改善&#xff0c;但受资金、政策、技术的制约&#xff0c;抄表环境问题仍…

深入了解Java Period类,对时间段的精确控制

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概2900多字&#xff0c;预计阅读时间长需要3分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#x…

二阶变系数线性微分方程

1、变量替换法 欧拉方程 是常数&#xff0c;是已知的函数。 二阶欧拉方程 (1) 当时&#xff0c;令,则 代入&#xff08;1&#xff09;中&#xff0c; .这样就把欧拉方程&#xff0c;化成了二阶常系数非齐次微分方程 当x<0时&#xff0c;令, 例题 解:令,则 代入上面的推…

VPS服务器”性价比之王”系列:RackNerd

2023 黑五&#xff01;&#xff01;&#xff01;新 Ryzen 系列 洛杉矶dc02机房重新补货&#xff01; 支付方式&#xff1a;支付宝、PayPal、信用卡、数字货币 2023 黑五促销活动&#xff08;限量&#xff09; CPU内存硬盘(SSD)流量带宽价格(续费同价)购买链接1核768 MB15GB…

GSLB是什么?谈谈对该技术的一点理解

GSLB是什么&#xff1f;它又称为全局负载均衡&#xff0c;是主流的负载均衡类型之一。众所周知&#xff0c;负载均衡位于服务器的前面&#xff0c;负责将客户端请求路由到所有能够满足这些请求的服务器&#xff0c;同时最大限度地提高速度和资源利用率&#xff0c;并确保无任何…

acwing-Linux学习笔记

acwing-Linux课上的笔记 acwing-Linux网址 文章目录 1.1常用文件管理命令homework作业测评命令 2.1 简单的介绍tmux与vimvimhomeworktmux教程vim教程homework中的一些操作 3 shell语法概论注释变量默认变量数组expr命令read命令echo命令printf命令test命令与判断符号[]逻辑运算…

【Virtual Box】显示界面后无反应

本文记录本人在使用Virtual Box中遇到的问题 1.Virtual Box启动后无反应点击菜单栏是可用的&#xff0c;但界面里的无法操作 【解决方法】&#xff1a;以管理员身份启动virtual Box

Linux:dockerfile编写搭建tomcat练习(9)

我使用的httpyum仓库 本地使用了5个文件&#xff0c;tomcat使用的官网解压直接用的包】 Dockerfile 主配置文件 基于centos基础镜像 jdk1.8.0_91 java环境 run.sh 启动脚本 centos.repo 仓库文件 tomcat 源码包 vim Dockerfile写入FROM centos MAINTAINER ta…

Java 设计模式——备忘录模式

目录 1.概述2.结构3.案例实现3.1.“白箱”备忘录模式3.2.”黑箱”备忘录模式 4.优缺点5.使用场景 1.概述 &#xff08;1&#xff09;备忘录模式 (Memento Pattern) 又称为快照模式&#xff0c;是一种行为型设计模式&#xff0c;它提供了一种保存和恢复对象状态的机制。备忘录模…

Python-图片去重

直接上代码 # 修改一下第34行文件夹路径以及13行图片后缀名即可使用 import os from hashlib import md5def remove_duplicate_images(folder_path):image_files []duplicate_images set()# 遍历文件夹&#xff0c;找到所有 JPG 图片文件for root, dirs, files in os.walk(f…

夜莺专业版网络设备功能介绍

网络设备采集简介 网络设备的问题通常会产生较大范围的影响&#xff0c;因此采集监控网络设备是一项常见的任务。不同公司在实施网络设备采集时可能采用不同的方案&#xff0c;主要有三类&#xff1a; SNMP&#xff08;Simple Network Management Protocol&#xff09;&#x…

【源码篇】基于SpringBoot+Vue实现的在线考试系统

文章目录 系统说明技术选型成果展示账号地址及其他说明 系统说明 基于SpringBootVue实现的在线考试系统是为高校打造的一款在线考试平台。 系统功能说明 1、系统共有管理员、老师、学生三个角色&#xff0c;管理员拥有系统最高权限。 2、老师拥有考试管理、题库管理、成绩管…

⭐ Unity + ARKIT 介绍 以及 平面检测的实现

在AR插件中&#xff0c;ARKIT是比较特殊的一个&#xff0c;首先他在很多追踪上的效果要比其他的AR插件要好&#xff0c;但是只能在IOS系统设备上运行。 1.首先ARKIT在最新版Unity已经集成在AR Foundation中&#xff0c;那我们就需要ARSession 和ARSessionOrigin这两个重要组件…

【CMD】工具脚本-输出其他cmd脚本的头部注释

小轮子&#xff0c;用于管理自己的脚本。 如下图的运行结果所示&#xff0c;效果便是输出本工具脚本所在路径下的其他cmd脚本的头部注释(用于提醒健忘的自己曾经写了啥东西。 可以把不时会用得上的个人脚本&#xff0c;集中放进一个文件夹中&#xff0c;然后将这个文件夹的路径…

【C++】赋值运算符重载

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

“学习强国”学习达人挑战赛流程

“学习强国”学习达人挑战赛通过赛易知识竞赛云平台完成&#xff0c;完整竞赛流程和规则如下&#xff1a; 比赛形式&#xff1a;“学习强国”学习平台首届达人挑战赛决赛为电视知识竞赛&#xff0c;前期需录入100名选手个人信息与各环节竞赛题库。 比赛载体&#xff1a;手机在…

龙迅#LT6911GX是一款高性能HDMI2.1至MIPI或LVDS芯片,支持图像处理,DSC压缩和嵌入式LPDDR4 旋转功能!

1.描述 应用功能&#xff1a;LT6711GX适用于HDMI2.1转MIPICSI/DSI&#xff1b;HDMI2.1转LVDS&#xff0c;支持高刷模式&#xff0c;带HDCP 方案&#xff01; 分辨率&#xff1a;最高支持8K30HZ 工作温度范围&#xff1a;−40C to 85C 产品封装&#xff1a;BGA169&#xff08;9*…

RabbitMQ 的七种消息传递形式

文章目录 一、RabbitMQ 架构简介二、准备工作 三、消息收发1. Hello World2. Work queues3. Publish/Subscrite3.1. Direct3.2. Fanout3.3. Topic3.4. Header 4. Routing5. Topics 大部分情况下&#xff0c;我们可能都是在 Spring Boot 或者 Spring Cloud 环境下使用 RabbitMQ&…

【powerjob】定时任务调度器 xxl-job和powerjob对比

文章目录 同类产品对比资源及部署相关资源占用对比&#xff1a;部署方式&#xff1a;xxl job :调度器&#xff1a;执行器&#xff1a; powerjob&#xff1a;调度器&#xff1a;执行器&#xff1a; 总结 背景&#xff1a; 目前系统的定时任务主要通过Spring框架自带的Scheduled注…