AutoHotKey-study

目录

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

最近发现常用键盘的上下左右箭头去操作输入输出问题感觉很不是滋味,不像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."
    elseMsgBox "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, &yif (y==0){Send "{Volume_Up}"}
    }
    ~WheelDown::{MouseGetPos &x, &yif (y==0){Send "{Volume_Down}"}
    }
    
  • 关闭视窗

    #SingleInstance Force
    ;CoordMode "Mouse","Screen";使用ctrl alt f4关闭所有相同视窗
    ^!f4::; 视窗存进 sClassWinGetClass, sClass, A; 关闭相同的类视窗while WinExist("ahk_class " . sClass) {WinClose}
    return;使用鼠标左键和esc关闭当前窗口
    ~LButton & Escape::WinGetActiveTitle ,titleWinclose %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)returnSpeak(say) {spovice:=ComObjCreate("sapi.spvoice")spovice.Speak(say)
    }
    
  • 获取当前鼠标颜色

    !a::MouseGetPos, MouseX, MouseYPixelGetColor, 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=FreeCommanderif (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 = 1return
    elseKeywait, Escape, d, t0.1if errorlevel = 0		; 0.5秒内按了Escape,则再读第二个按键,若为Escape则关闭视窗{WinGetActiveTitle, TitleWinClose, %Title%return}return	;若第二个按键不为Escape则结束
    
  • 批量删除视窗

    #SingleInstance Force
    SetTitleMatchMode 2	; 设置wintitle的匹配模式#n::run notepadReturn^!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)WinCloseReturn
    
  • 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 ,500WinActive, "Snipping Tool"send ,!msend ,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第一次开elseMsgBox, 布尔值为%onoff%`n第二次关
      Return
      
    2. 分离式开关设计
      F1::F1onoff := !F1onoff, F2onoff=0SetTimer F2循环, OffSetTimer F1循环, % F1onoff=0 ? "Off" : 50ToolTip
      return
      F2::F2onoff := !F2onoff, F1onoff=0SetTimer F1循环, OffSetTimer F2循环, % F2onoff=0 ? "Off" : 50ToolTip
      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)returnMarkdown_title(numHashes){Clipboard := ""sendInput {home}sendInput {SHIFT}+{End}sleep 200Clipwait ,1		; 等待剪切板包含数据text := Clipboardtext := 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.mzph.cn/news/196468.shtml

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

相关文章

分享80个菜单导航JS特效,总有一款适合您

分享80个菜单导航JS特效&#xff0c;总有一款适合您 80个菜单导航JS特效下载链接&#xff1a;https://pan.baidu.com/s/1NgNc759Kg1of_8vR7kaj6A?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;…

pip的基本命令和使用

pip 简介 pip是Python官方的包管理器&#xff0c;可以方便地安装、升级和卸载Python包。 pip 常用命令 显示版本和路径 pip --version获取帮助 pip --help升级pip和升级包 pip install --upgrade pip # Linux/macOS pip install -U pip # windowspip install…

【Cesium】模型平面裁切

const scene viewer.scene;let tileset; let targetY 400.0; let planeEntities []; let selectedPlane; // 选择的切面 let clippingPlanes; // 切面属性// 当鼠标点击切面时&#xff0c;修改相关属性 const downHandler new Cesium.ScreenSpaceEventHandler(viewer.sce…

表达式二叉树的中序遍历:2017年408算法题

算法思想 表达式二叉树的中序遍历即中缀表达式除了根节点和叶结点&#xff0c;遍历到其他结点时在遍历其左子树前加上左括号&#xff0c;在遍历完右子树后加上右括号 算法实现 //中序遍历&#xff0c;deep从1开始&#xff0c;即根节点的深度为1 void midOrder(BTree T,int …

作业12.4

1.沙发床的多继承 #include <iostream>using namespace std; class Sofa { private:string sit; public://无参构造Sofa(){}//有参构造Sofa(string sit):sit(sit){}//拷贝构造Sofa(const Sofa &other):sit(other.sit){}//拷贝赋值Sofa &operator (const Sofa &…

【数据分享】2015-2023年我国区县逐月二手房房价数据(Excel/Shp格式)

房价是一个城市发展程度的重要体现&#xff0c;一个城市的房价越高通常代表这个城市越发达&#xff0c;对于人口的吸引力越大&#xff01;因此&#xff0c;房价数据是我们在各项城市研究中都非常常用的数据&#xff01;之前我们分享过2015-2023年我国地级市逐月房价数据&#x…

基于姿态估计的3D动画生成

在本文中&#xff0c;我们将尝试通过跟踪 2D 视频中的动作来渲染人物的 3D 动画。 在 3D 图形中制作人物动画需要大量的运动跟踪器来跟踪人物的动作&#xff0c;并且还需要时间手动制作每个肢体的动画。 我们的目标是提供一种节省时间的方法来完成同样的任务。 我们对这个问题…

MATLAB学习QPSK之QPSK_MOD_DEMOD_SALIMup分析

学习的背景说明 因为在学习5G物理层&#xff0c;一直很忙&#xff0c;没有时间。最近稍有一点空闲&#xff0c;所以&#xff0c;学习一下算法。 QPSK的算法&#xff0c;虽然说我没有完全学透&#xff0c;大致还是懂的。只能一直没时间用MATLAB来研究一下。 然后看到这个实例&…

YITH WooCommerce Social Login跨境电商网站社交登录高级版插件

点击阅读YITH WooCommerce Social Login跨境电商网站社交登录高级版插件原文 YITH WooCommerce Social Login跨境电商网站社交登录高级版插件让您的用户节省时间并通过他们的社交资料之一登录或注册网站。 您如何从中受益&#xff1a; 用户无需填写表格、插入个人数据&#…

【数据分享】我国12.5米分辨率的地形粗糙度(起伏度)数据(免费获取)

地形数据&#xff0c;也叫DEM数据&#xff0c;是我们在各项研究中最常使用的数据之一。之前我们分享过源于NASA地球科学数据网站发布的12.5米分辨率DEM地形数据&#xff01;基于该数据我们处理得到12.5米分辨率的坡度数据、坡向数据、山体阴影数据&#xff08;均可查看之前的文…

基于Python的6+1号码生成器

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;如喜欢麻烦您点个&#x1f44d;或者点个⭐&#xff01; &#x1f…

(C++)盛水最多的容器--双指针法

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://le…

掌握排序的艺术:Python中sorted()函数全面解析!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 1. 引言 排序在编程中是一个基本且重要的操作&#xff0c;而 Python 中的 sorted() 函数则为我们提供了强大的排序能力。在本篇文章中&#xff0c;我们将深入研究不同排序算法、sorted() 函数的灵活性&#xff…

数据结构与算法之美学习笔记:30 | 图的表示:如何存储微博、微信等社交网络中的好友关系?

目录 前言如何理解“图”&#xff1f;邻接矩阵存储方法邻接表存储方法解答开篇内容小结 前言 本节课程思维导图&#xff1a; 微博、微信这些社交软件我想你肯定都玩过吧。在微博中&#xff0c;两个人可以互相关注&#xff1b;在微信中&#xff0c;两个人可以互加好友。那你知道…

项目管理实践:如何进行项目分解?

项目管理是一个复杂的工程&#xff0c;作为项目管理者&#xff0c;项目经理应该有着统筹管理项目全局的能力。 创建一个项目计划可分为四步&#xff1a; 1、明确项目目标 项目在成立或创建之初就要有清晰明确的目标&#xff1b; 项目达到什么目的&#xff1f; 项目目标是…

安美数字酒店宽带运营系统 SQL注入漏洞复现

0x01 产品简介 HiBOS酒店宽带运营系统隶属于安美世纪(北京)科技有限公司开发的一套酒店宽带管理系统。 0x02 漏洞概述 安美数字酒店宽带运营系统 online_status.php、language.php等接口处存在SQL注入漏洞,未经身份认证的攻击者可以通过此漏洞获取数据库权限,进一步利用可…

快手视频如何去掉水印?三个简单好用视频去水印方法

快手视频如何去掉水印&#xff1f;尽管新兴的短视频平台如春笋般涌现&#xff0c;吸引了众多观众在业余时间浏览和分享视频&#xff0c;快手作为当下主流短视频之一&#xff0c;许多自媒体创作者也常常会下载一些热门的视频素材进行二次编辑。然而&#xff0c;他们都可能会面临…

【超详细教程】基于html+js实现轮播图

轮播图是现代网页设计中常见的元素之一&#xff0c;它能够展示多张图片或内容&#xff0c;在有限的空间内循环播放&#xff0c;提升网页的视觉效果和用户体验。下面将以一个简单的网页轮播图为例&#xff0c;说明如何基于HTML和JavaScript实现。 ​ 1、R5Ai智能助手 chatgpt国…

揭开 Java on Azure 开发工具未来6个月路线图的神秘面纱

作者&#xff1a;Jialuo Gan - Program Manager, Developer Division at Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到 Java on Azure 工具十月份更新。在本次更新中&#xff0c;我们将分享未来几个月在 Java on Azure 开发工具方面的投资路线图。此外&…

JVM==>图解字节码指令

一&#xff0c;原始代码 我们来看一下执行这段代码的具体流程 那执行这段代码中 JVM就会把已经编译好的.class文件加载到内存中&#xff0c;交给CPU运行 1&#xff09;常量池载入运行时常量池 我们发现 10 并没有被存入常量池中&#xff0c; 这是因为short范围以内的数字不会…