热键控制的进阶用法

以下是平时群里搜集的热键控制扩展用法,一起贴出来分享一下

感谢AHK社区的群友们分享代码

 

1.一键三用,单击、双击、长按

优点:稳定。缺点:单击时有400毫秒延时。不适合常用键。删除2~5行可改为单击双击。

F1::
KeyWait, F1, T1
if (ErrorLevel = 1) {
	Msgbox 长按
} else {
if (winc_presses > 0) {
winc_presses += 1
Return
} winc_presses := 1
SetTimer, KeyWinC1, -400
Return

KeyWinC1:
if (winc_presses = 1) {
	Msgbox 单击
} else if (winc_presses = 2) {
	Msgbox 双击
} winc_presses := 0
Return
} Return

 

2.右键双击不影响原按键

优点,不影响单击工作,双击反应也快。缺点,我笔记本电脑有时会失效。

~RButton::
t:=-Round(oldt)+(oldt:=A_TickCount)
if (t<100 || t>400)
    Return
else oldt:=0
Msgbox,4096,, 双击
Return

 

3.键盘大小写状态判断

Send发送按键是区分大小写的,假如现在是键盘锁定大写状态,Send, a的话,AHK就会先切换到小写再发送a。当大写状态输入一串小写字母就会出现频繁切换大小写的情况。需要这代码修正

if GetKeyState("CapsLock", "T") {
    MsgBox 大写
	} else {
	MsgBox 小写
  }

 

4.按某键就启动,松开停止【示例为鼠标左键】

主要用于狂点鼠标或者连击某键

~LButton::
While (GetKeyState("LButton","P")) {
   Send a
} Return

 

5.按住Alt触发鼠标连点【接上条】

在上条基础上扩展而来,做为组合键触发鼠标连点

~*LButton:: 
If(GetKeyState("Alt", "P")) 
Settimer, LianDian, 50 
Return 

LButton Up:: 
Settimer, LianDian, Off 
Return 

LianDian: 
Send, {LButton} 
Return 

 

6.功能热键开关,按一次打开,再按一次关闭

用于功能开关,像电视遥控一样,按一次打开,再按一次关闭

F1::
if (a := !a)
MsgBox, 布尔值为%a%`n第一次开
else
MsgBox, 布尔值为%a%`n第二次关
Return

 

7.同时按AB键

F1::Send,{a down}{b down}{b up}{a up}

 

8.脚本控制,暂停、重新开始、退出

Loop {
	Sleep, 10
	MouseGetPos, x, y
	ToolTip, 持续运算演示-%A_Index%, x+10,y+10
}

F3::pause
F4::Reload
Esc::ExitApp

 

9.按F1,如果指定坐标的颜色,是颜色组就按A或者B,再按一下F1则暂停

Global 颜色组:={}
颜色组["2E3436"]:="A"
颜色组["3EEBD9"]:="B"
Return

Esc::ExitApp

F1::
if !(a := !a) {
	SetTimer, 输入, off
} else {
	SetTimer, 输入, 100
	Soundbeep,500,100
} Return

输入:
颜色:=GetColor(164,119)
if (颜色组[颜色]!="") {
  Send,% 颜色组[颜色]
} else if 颜色 not in 000000,FFFFFF
{ 
  Msgbox, % "错误"颜色
  ExitApp
} Return

GetColor(x,y) {
PixelGetColor, color, x, y,Fast RGB
StringRight color,color,6 ;取颜色代码的后6位【就是去掉开头的0x】
Return color
}

 

10.鼠标右键双击粘贴

RButton::
RButtonCount++
if RButtonCount=1
	SetTimer, CheckR, -1000
if RButtonCount=1
KeyWait, RButton, U, T0.8
if ErrorLevel
	RButtonCount1:=1
else {
	KeyWait, RButton, D, T0.1
	if ErrorLevel
		RButtonCount1:=2
	else {
		RButtonCount++
		RButtonCount1:=3
	}
}
if RButtonCount1=1
        Menu, tray, Show
else if RButtonCount1=2
        Send {RButton}
else if RButtonCount1=3
        Send ^v
if  (RButtonCount1=1 || RButtonCount1=3)
	Gosub,RCount
Return
 
RCount:
RButtonCount:=0
RButtonCount1:=0
Return
 
CheckR:
if (RButtonCount=1 && RButtonCount1=2)
	Gosub, RCount
Return

 

11.判断进程是否打开,没打开则启动程序,开着则唤醒目标

F1::
Process, Exist , hh.exe
if ErrorLevel {
WinActivate, ahk_class HH Parent
} else {
Run D:AHK热键工具AutoHotkey-v1.1.33.02_帮助文件中文.chm
} Return

 

12.热键可以只在指定窗口下生效,像Ctrl、Alt、Shift键是分左右的,可以选择性组合达到更好的分配

#IfWinActive ahk_class HH Parent

RCtrl & Enter::
ClipHuanYuan := ClipboardAll
Clipboard := ""
Send,^a
Send,^x
ClipWait, 2
Run, https://www.autoahk.com/?s=%Clipboard%&type=post
Clipboard := ""
Clipboard := ClipHuanYuan
ClipHuanYuan := ""
Return

#IfWinActive

为TA充电
共{{data.count}}人
人已赞赏
AHKV1学习

苏宁网络时间获取-虚荣

2021-5-20 10:54:20

学习

AutoHotkey使用指定浏览器打开网址

2021-5-21 16:42:23

2 条回复 A文章作者 M管理员
  1. 登临送目

    谢谢

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索