[专栏]超级热键

单击,双击,多击,长按,外加鼠标手势。源码汉字编写,注释详细。有用给点个赞啊

没废话,直接上源码,交流请加群:92959435 [92 95 94 三五] 抛砖引玉,欢迎大家批评指点。

哦,对了,使用说明,先看看说明吧。 [专栏]超级热键

send与ahk相同。

send2与ahk相同。增加{sleep 延时毫秒}和{soundbeep 频率,时长}两种模拟效果

run与ahk相同

控制窗口:

命令格式:控制窗口/要控制的窗口标题/控制类型/参数1/参数2

如果省略窗口标题,则以当前窗口标题为准

控制类型又分以下几种

1.显示:   操作方式:控制窗口/窗口标题/显示

命令说明:控制指定的窗口[窗口标题]显示

2.隐藏:   操作方式:控制窗口/窗口标题/隐藏

命令说明:控制指定的窗口[窗口标题]隐藏

3.关闭:   操作方式:控制窗口/窗口标题/关闭

命令说明:关闭指定的窗口[窗口标题]

4.透明度:     操作方式:控制窗口/窗口标题/透明度/透明值(0-255)

命令说明:将指定的窗口[窗口标题]设置透明(255为完全透明)

5.透明色:     操作方式:控制窗口/窗口标题/透明色/要让透明的颜色 透明值(0-255)

命令说明:将窗口[窗口标题]指定的颜色设置透明(255为完全透明)。透明后鼠标可穿透窗口操作后面的窗口或文件。

#singleinstance,force
#InstallKeybdHook
#InstallMouseHook
SetWorkingDir,%A_ScriptDir%
FileInstall,超级热键使用说明.txt,超级热键使用说明.txt
FileInstall,超级热键.ini,超级热键.ini
#Include %A_ScriptDir%\Toolbar.ahk

Gui main:New, hWndhGui
;要使用图片作为其他控件的背景, 则应该在其他控件之前正常添加图片. 然而, 如果这些控件是可输入型且此图片控件含有g 标签, 那么在其他控件后创建图片控件并在其选项中包含 0x4000000(这是 WS_CLIPSIBLINGS). 使用此技巧还可以把一个图片设为 Tab 控件或 ListView 的的背景

;Gui Add, Picture, x-8 y-8 w2400 h1920 0x4000000 , C:\Documents and Settings\Administrator\桌面\超级热键备份2017-9-22\21307.jpg
Gui Add, Tab3, x0 y33 w600 h445 Choose2, 全局设置|热键设置|子命令集|其它工具|帮助关于
gui,tab,1
Gui Add, Text, x20 y88 w80 h23, 触发长按时间
Gui Add, Text, x20 yp+28 wp hp, 按键有效间隔
Gui Add, Text, x20 yp+28 wp hp, 个人单击时长
Gui Add, Text, x20 yp+28 wp hp, 鼠标划动误差
Gui Add, Text, x20 yp+28 wp hp, 至少移动距离
;Gui Add, Text, x20 yp+28 wp hp , 斜向微调系数
;Gui Add, Text, x20 yp+28 wp hp , 窗口匹配模式
Gui Add, Edit, x108 y83 w60 h21 VEdit_触发长按时间 G界面事件处理
Gui Add, Edit, xp yp+28 w60 hp VEdit_按键有效间隔 G界面事件处理
Gui Add, Edit, xp yp+28 w60 hp VEdit_个人单击时长 G界面事件处理
Gui Add, Edit, xp yp+28 w60 hp VEdit_鼠标划动误差 G界面事件处理
Gui Add, Edit, xp yp+28 w60 hp VEdit_至少移动距离 G界面事件处理
;Gui Add, Edit, xp yp+28 w60 hp VEdit_斜向微调系数 G界面事件处理
;Gui Add, Edit, xp yp+28 w60 hp VEdit_窗口匹配模式 G界面事件处理

Gui Add, Text, x200 y88 w80 h23 , 两次按键间隔
Gui Add, Text, xp yp+28 wp hp , 按键持续时间
Gui Add, Text, xp yp+28 wp hp , 鼠标点击延时
Gui Add, GroupBox, x5 y66 w460 h162, 左边是人的操作,右边是系统的操作
Gui Add, Edit, x288 y82 w60 h21 VEdit_两次按键间隔 G界面事件处理
Gui Add, Edit, xp yp+30 wp hp VEdit_按键持续时间 G界面事件处理
Gui Add, Edit, xp yp+30 wp hp VEdit_鼠标点击延时 G界面事件处理
Gui Add, Radio, x218 y165 w60 h23 VRadio_Event G界面事件处理, Event
Gui Add, Radio, xp yp+30 wp hp Checked1 VRadio_Play G界面事件处理, Play

Gui Add, GroupBox, x5 y242 w460 h128, 分组2

gui,tab,2
Gui Add, Text, x20 y88 w60 h23, 热键前缀键
Gui Add, Text, xp yp+30 w60 h23, 热键动作键
Gui Add, Text, xp yp+30 w60 h23, 适用范围选择
Gui Add, ListView, R50 xp yp+36 w320 h268 Vcmdlist AltSubmit Grid -Multi -ReadOnly +Checked +LV0x40 +LV0x400+LV0x800 +LV0x80, 命令|参数1|参数2|参数3|参数4
LV_ModifyCol(1,80)
LV_ModifyCol(2,60)
LV_ModifyCol(3,60)
LV_ModifyCol(4,60)
LV_Add("+Checked","窗口控制","窗口标题","显示")
LV_Add("+Checked","窗口控制","窗口标题","隐藏")
LV_Add("+Checked","窗口控制","窗口标题","透明度","200")

;Gui Add, ComboBox, x104 y88 w88, ComboBox
Gui, Add, Hotkey, x104 y88 w88 h23 Limit64 vHKname
Gui Add, ComboBox, xp yp+30 wp Choose4, 鼠/键-单击|鼠/键-双击|鼠标-左划|鼠标-右划|鼠标-上划|鼠标-下划|下右-划动|下左-划动|上右-划动|上左-划动|热键-长按
Gui Add, ComboBox, xp yp+30 w168 Choose1 Sort, 请选择热键适用窗口
Gui Add, Button, x208 y88 w60 h23 v增加热键 G界面事件处理, 增加热键
Gui Add, Button, xp yp+30 w60 h23 v删除热键 G界面事件处理, 删除热键
Gui Add, Button, x280 y88 w60 h23 v打开帮助 G界面事件处理, 打开帮助
Gui Add, Button, xp yp+30 w60 h23 v编辑配置 G界面事件处理, 编辑配置
Gui Add, Button, xp yp+30 w60 h23 v保存配置 G界面事件处理, 保存配置

Gui Add, ListBox, x360 y88 w222 h368 Vhotkeylist, 己定义热键列表

gui,tab,3 ;子命令集
Gui Add, Button, xp yp+30 w60 h23, 等待扩展
gui,tab,4 ;其它工具
Gui Add, Button, xp yp+30 w60 h23, 等待扩展
gui,tab,5 ;帮助关于
Gui Add, Button, xp yp+30 w60 h23, 等待扩展
;创建状态栏
Gui Add, StatusBar, x0 y359 w481 h23, Status Bar

;创建菜单
Menu, FileMenu, Add, &Open  `tCtrl+O, 菜单事件处理  ; 关于 Ctrl+O 请参阅后面的备注.
Menu, FileMenu, Add, E&xit, 菜单事件处理
Menu, HelpMenu, Add, &About, 菜单事件处理
Menu, MyMenuBar, Add, 文件(&File), :FileMenu  ; 附加上面的两个子菜单.
Menu, MyMenuBar, Add, 帮助(&Help), :HelpMenu
Gui, Menu, MyMenuBar
;托盘图标设置
menu,tray,add
menu,tray,add,隐藏窗口,托盘事件处理
menu,tray,add,热键切换---Win+ESC,托盘事件处理
menu,tray,add,帮助关于,托盘事件处理
menu,tray,add,退出脚本---ESC,托盘事件处理
FileRead,说明,超级热键使用说明.txt
;MsgBox,0,使用说明,%说明%


;★★★★★★★★★★★★★★★★★★★★★★工具栏---工具栏---工具栏---工具栏★★★★★★★★★★★★★★★★★★★★★★
Gui,main:Show, w800 h500, 超级热键
;创建工具栏---需要先显示句柄为hgui的窗口,然后才能添加,不然不显示 。
GuiAddToolBar(hGui)
;工具栏添加按钮
GuiAddToolbar(hWnd) {
     ;IL_Add(ImageList,  "gjl.ico") ;指定文件名为非图标文件时, 最后两个参数为透明色;最后一个参数非0时为缩放。为零时裁剪至合适
	ImageList := IL_Create(8)
    IL_Add(ImageList, "shell32.dll", 22)
    IL_Add(ImageList, "shell32.dll", 28)
    IL_Add(ImageList, "shell32.dll", 42)
    IL_Add(ImageList, "shell32.dll", 48)
    IL_Add(ImageList, "shell32.dll", 105)
    IL_Add(ImageList, "shell32.dll", 44)
    IL_Add(ImageList, "shell32.dll", 9)
    IL_Add(ImageList, "shell32.dll", 24)
    hToolbar := Toolbar_Add(hWnd, "OnToolbar", "flat list tooltips", ImageList)
    Buttons = 
    (LTrim
        控制面板
        关闭电脑
        加密
        解锁
        收藏
        C盘
        绿树
		帮助关于
	)
    Toolbar_Insert(hToolbar, Buttons)
}
;工具栏事件
OnToolbar(hWnd, Event, Text, Pos, Id) {
    If (Event = "Hot") {
		Return
    }
}




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  脚  本  全  局  设  置---------这里是相关参数  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/*--------这里是相关内置变量的注释
A_MouseDelay
A_MouseDelayPlay
A_TimeIdle 从系统最后一次接收到键盘, 鼠标或其他输入后所经过的毫秒数. 这可以用来判断用户是否离开. 用户的物理输入和由 任何 程序或脚本生成的模拟输入 (例如 Send 或 MouseMove 命令) 会让此变量重置为零. 由于此变量的值趋向于以 10 的增量增加, 所以不应该判断它是否等于另一个值. 相反, 应该检查此变量是否大于或小于另一个值
A_TimeIdlePhysical 与上面类似, 但在安装了相应的钩子 (键盘 或 鼠标) 后会忽略模拟的键击和/或鼠标点击; 即此变量仅反应物理事件. (这样避免了由于模拟键击和鼠标点击而误以为用户存在.) 如果两种钩子都没有安装, 则此变量等同于 A_TimeIdle. 如果仅安装了一种钩子, 那么仅此类型的物理输入才会对 A_TimeIdlePhysical 起作用 (另一种/未安装钩子的输入, 包括物理的和模拟的, 都会被忽略).
 
  ;--------------------------
 SetKeyDelay [, Delay, PressDuration, Play]
 参数1:指的是两次按键的间隔.模式默认 Delay 为 10,留空此参数来保持当前的 Delay     ===========[A_KeyDelay ]
 参数2:指按住按键的持续时间                                                                                        ===========[A_KeyDuration]
 参数3:应用于 SendPlay 模式 而不是SendEvent 默认延时总是为 -1/-1                         ===========[A_KeyDelayPlay,A_KeyDurationPlay]
 
 SetMouseDelay, Delay [, Play]------------------------------设置每次鼠标移动或点击后自动的延时
 参数1:毫秒表示的时间, 可以为 表达式. 使用 -1 表示无延时,而 0 表示最小延时(然而如果使用了 Play 参数,则 0 和 -1 都表示无延时).如果未设置, 则对于传统的 SendEvent 模式默认延时为 10 而对于 SendPlay 模式 为 -1.
 参数2:单词 Play 应用于 SendPlay 模式 而不是SendEvent 模式. 如果脚本没有使用此参数, 则 SendPlay 模式的延时总是为 -1
 
 
#HotkeyInterval Milliseconds: 默认为 2000  与 #MaxHotkeysPerInterval 一起指定热键激活的速率,超过此速率会显示警告对话框.
#MaxHotkeysPerInterval:设置的时间里,不触发警告对话框情况下可以按下的热键最大数目,默认为为 70 

#HotkeyModifierTimeout Milliseconds间隔长度,单位为毫秒.此值设为 -1 时, 它永远不会超时 (在 Send 后修饰键总是被推回到按下的状态), 设为 0 时则总是超时 (修饰键总是不会被推回到按下的状态).默认为 50

在下列情况中 不需要 使用此指令:
•热键通过 SendInput 或 SendPlay 模式发送键击. 这是由于这些模式会延迟用户的物理键击到 Send 完成后.
•脚本安装了键盘钩子(您可以通过主窗口中的"View->Key history"菜单项或KeyHistory命令判断您的脚本是否使用了钩子).
这是由于钩子可以记录用户实际按住的修饰键 (ALT/CTRL/WIN/SHIFT), 因而不需要使用超时.



*/
/*-------设置坐标模式--------命令说明
CoordMode, ToolTip|Pixel|Mouse|Caret|Menu [, Screen|Window|Client]参数

Param1
ToolTip: 作用于 ToolTip.
Pixel: 作用于 PixelGetColor, PixelSearch 和 ImageSearch.
Mouse: 作用于 MouseGetPos, Click 以及 MouseMove/Click/Drag.
Caret: 作用于内置变量 A_CaretX 和 A_CaretY.
Menu:作用于为 Menu Show 命令指定坐标的时候.

Param2
默认为 Screen.
Screen: 坐标相对于桌面 (整个屏幕).
Relative: 坐标相对于活动窗口.
Window [v1.1.05+]: 与 Relative 效果相同, 但由于含义清晰, 因此建议使用.
Client [v1.1.05+]:坐标相对于活动窗口的工作区,其中不包括标题栏,菜单栏(如果它含有标准菜单栏)和边框.Client 坐标模式较少依赖于操作系统版本和主题


{WheelDown}, {WheelUp}, {WheelLeft}, {WheelRight}
*/

;------------全局变量设置---------------------
触发二次按键间隔:=A_KeyDelay
IniRead,触发长按时间,超级热键.ini,全局配置,触发长按时间,300
IniRead,按键有效间隔,超级热键.ini,全局配置,按键有效间隔,180
IniRead,个人单击时长,超级热键.ini,全局配置,个人单击时长,60
IniRead,鼠标划动误差,超级热键.ini,全局配置,鼠标划动误差,60
IniRead,至少移动距离,超级热键.ini,全局配置,至少移动距离,150
IniRead,斜向微调系数,超级热键.ini,全局配置,斜向微调系数,0.8
IniRead,窗口匹配模式,超级热键.ini,全局配置,窗口匹配模式,2
;----------------------------------------------------------
IniRead,两次按键间隔,超级热键.ini,全局配置,两次按键间隔,10
IniRead,按键持续时间,超级热键.ini,全局配置,按键持续时间,10
IniRead,鼠标点击延时,超级热键.ini,全局配置,鼠标点击延时,2

SetTitleMatchMode,%窗口匹配模式% ;设置窗口匹配方式
SetKeyDelay, 10,2,1   ;建议设置为play模式,[两次按键间隔,按键按下时长]
SetMouseDelay,5,play  ;建议设置为play模式

CoordMode,Mouse,window ;设置鼠标的坐标模式为window模式

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;           程            序            开            始           ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;           程            序            开            始           ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

更新界面()
命令选择列表更新()
读取热键列表()

SetTimer,提示清空,1000

;从ini文件读取待注册热键信息
IniRead,热键,超级热键.ini
按键:=[]
i:=0
loop,parse,热键,`n
{
	if (A_LoopField!="帮助说明" && A_LoopField!="全局配置"){
		i++
		按键[i]:=A_LoopField
	}
}

;循环注册热键
loop,%i% {
键:=按键[A_Index]
范围:=[] ;必须清空,不然上次有限制,再次没限制时会继续上次的限制。因为下面的读取不到不会清空变量。
IniRead,限制组,超级热键.ini,%键%,限制,""
范围:=StrSplit(限制组,"/")
次数:=(范围.MaxIndex()="" ? 1 : 范围.MaxIndex()) ;没有限制条件时,全局起作用。所以要循环一次
	loop, %次数% {
		if (范围[A_Index]!="") {
			Hotkey,ifwinActive, % 范围[A_Index]
		}
		Hotkey,%键%,超级热键
		hotkey,%键% up,超级热键
		Hotkey,if
		
	}
}

;核心函数。热键关联函数。用来判断热键动作。
超级热键(){
global 
上次按键时长:=0 ;如果时间较长,很难触发单击任务,由脚本自己控制
当前按键次数:=0 ;用于记录热键点击的次数=======>点击间隔超时将被清零

热键名:=A_ThisHotkey ;热键名保存,防止中途中断内置变量值改变
if (StrLen(热键名)>3 ){
	热键:=substr(热键名,-2)=" up" ?  substr(热键名,1,StrLen(热键名)-3) : 热键名
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  按  键  按  下  ;;;;;;;;;;;;;;;;;;;;;;;  按  键  按  下  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
if (A_ThisHotkey=热键){
	持续按键时间:=0  ;用户记录用户按下热键持续的时间,按键弹起进清空
	SetTimer,按键间隔计时,off
	SetTimer,按键按下计时,%触发二次按键间隔%  ;周期为负数, 定时器仅执行一次
	按键次数++
	MouseGetPos,Md_x,Md_y
	按下:=1
	;---------------------------------
	loop { 
		if (持续按键时间>=触发长按时间){ ;(继续按键时间<个人单击时长){
			ToolTip,触发长按命令`,当前长按时间[%持续按键时间%]
			SoundBeep,8000,300
			调用任务(热键名,"长按")
			持续按键时间:=0 ;如果要触发长按后像正常长按样不停发送。请取消此行
			按键次数:=0
			return
		}
		Sleep,0
		;ToolTip,% "当前按键时长" 持续按键时间 ;按键持续期间,但不足以达到长按时间要求时的处理 and 
	} until (按下!=1)  ;!GetKeyState("`" 热键 `"","P") ;这里的热键变量如果内容包含符号,就容易出错啦
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  按  键  弹  起  ;;;;;;;;;;;;;;;;;;;;;;;  按  键  弹  起  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
}else if (A_ThisHotkey=热键 " up"){
	;MsgBox,这里是弹起命令区`,执行完毕请继续检查是否执行其它热键任务
	按下:=0 ;假
	上次按键时长:=持续按键时间
	持续按键时间:=0 ;用户记录用户按下热键持续的时间,按键弹起进清空
	SetTimer,按键按下计时,off
	SetTimer,按键间隔计时,-%按键有效间隔% ;前置的负号表示只运行一次
	MouseGetPos,Mu_x,Mu_y
	斜向操作距离:=至少移动距离*斜向微调系数  ;斜向操作移动距离稍小于正常
	X差:=Mu_x-Md_x
	y差:=Mu_y-Md_y
	if (上次按键时长>=个人单击时长) && (上次按键时长<触发长按时间) && (abs(X差)>至少移动距离 || abs(y差)>至少移动距离 ){  
		if (X差<-至少移动距离&& Abs(y差)<鼠标划动误差) { ;鼠标键向左移动,上下偏差不得超过60像素
			热键动作:="左划"
		}else if (X差>至少移动距离 && Abs(y差)<鼠标划动误差) { ;鼠标键向右移动,上下偏差不得超过60像素
			热键动作:="右划"
		}else if (abs(X差)<鼠标划动误差 && y差<-至少移动距离) { ;鼠标键向上移动,左右偏差不得超过60像素
			热键动作:="上划"
		}else if (abs(X差)<鼠标划动误差 && y差>至少移动距离) { ;鼠标键向下移动,左右偏差不得超过60像素
			热键动作:="下划"
		}else if (X差>斜向操作距离 && y差>斜向操作距离){ ;鼠标键向下移动,向右移动一定像素=====斜向操作移动距离稍小于正常
			热键动作:="下右"
		}else if (X差<-斜向操作距离 && y差>斜向操作距离) { ;鼠标键向下移动,向左移动一定像素
			热键动作:="下左"
		}else if (X差>斜向操作距离 && y差<-斜向操作距离) { ;鼠标键向上移动,向右移动一定像素
			热键动作:="上右"
		}else if (X差<-斜向操作距离 && y差<-斜向操作距离) { ;鼠标键向上移动,向左移动一定像素
			热键动作:="上左"
		}else{
			SoundBeep,2000,500
			热键动作:="鼠标动作不标准`,X轴相差:" abs(Mu_x-Md_x) "`n`tY轴相差:" Abs(Mu_y-Md_y) 
		}
	;msgbox,当前行===>%A_linefile%:%A_LineNumber% X差 %X差% y差 %y差% 热键动作 %热键动作%
	调用任务(热键名,热键动作)
	}	
} ;热键部分结束






;--------------下面是标签:------按键按下计时:----------------
按键按下计时:
        持续按键时间+=%触发二次按键间隔%
    return
;--------------下面是标签:-------按键间隔计时---------------
按键间隔计时:
	if (abs(mu_x-md_x)<10 and abs(mu_y-md_y)<10){
		if (按键次数>0 and 上次按键时长<按键有效间隔)  { 
			调用任务(热键名,按键次数 "击")
		}
	}  
	按键次数:=0
return
} ;热键函数结束


;/*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
调用任务(热键名,动作类型){
	;str:="这是由" 热键名 "触发的[" 动作类型 "]"
	if (StrLen(热键名)>3 ){
		热键:=substr(热键名,-2)=" up" ?  substr(热键名,1,StrLen(热键名)-3) : 热键名
	}
		动作类型:=(动作类型="1击" ?  "单击" :  动作类型)
		动作类型:=(动作类型="2击" ?  "双击" : 动作类型 )
	;根据当前窗口执行不同组的动作
		iniRead,限制,超级热键.ini,%热键%,限制
		限制组:=StrSplit(限制,"/")
		限制数量:=限制组.MaxIndex()
		loop,%限制数量% {
			IfWinActive, % 限制组[A_Index]
			{
				动作类型:=(A_Index=1 ?  动作类型: 动作类型 A_Index)
				break
			}
		}
	;分析命令并执行相应动作
		IniRead,执行命令,超级热键.ini,%热键%,%动作类型%
		命令组:=StrSplit(执行命令,"/") 
	if(命令组[1]=""){  ;ahk帮助文件中strsplit部分说命令组[0]包括了分解的数量.这里并没有储存该值 .导致调试了好久才找到问题
		热键名 := StrReplace(热键名, "~") 
		热键名 := StrReplace(热键名, "$") 
		send,{%热键名%}
	}else if (命令组[1]="run" or 命令组[1]="运行程序"){
			run,% 命令组[2] ,% 命令组[3]
	}else if(命令组[1]="send" || 命令组[1]="发送按键"){  ;这里的逻辑或是符号直竖。不是?号上面的那个双斜线。
			send,% 命令组[2] 
	}else if(命令组[1]="send2" || 命令组[1]="延时发送"|| 命令组[1]="超级发送"){
			延时发送(命令组[2] )
	}else if(命令组[1]="控制窗口" || 命令组[1]="窗口控制"|| 命令组[1]="winset"){
			控制窗口(命令组[2],命令组[3],命令组[4])
	}else{ ;===如果该值为空,执行默认动作 
			send,{%热键名%}
	} ;命令分析结束	
} ;函数结束



提示清空:
ToolTip
return

mainGuiClose:
	;gui main:hide
	ExitApp
return

#Include,超级热键函数.ahk

#esc::
Suspend,Toggle
return
esc::
ExitApp

一、现有功能:
1、可以随意增加热键,单击,双击,多击,长按,鼠标划动都不是问题。
2、可以扩展小工具,增加小工具库。由热键调用。《小工具待增加》
3、可以设置热键使用范围。限定哪些窗口可以使用。
4、可以由设置调用程序,文件夹,网页。一键式打开。
5、send己扩展至可延时,发送声音。命令:send2
6、ESC退出脚本。Win+ESC为脚本热键开关
二、使用说明
建立新热键步骤:
1、打开ini,增加热键名的字段(以[]括起来的部分即为要创建的热键)
ini字段为热键名。不含” up”。因为创建热键时,自动创建包括弹起的热键处理
2、各字段下面的tip初步定为提示。
3、字段下面的限制就是热键限制在指定的窗口才可以使用。以”|”分隔不同的窗口项。每项对应不同的
操作。第一个”|”和第二个”|”之间的为第二组限定窗口。对应的热键操作项后面是2。第三组对应的是
3.所有的像单击3,双击3,左划3等以3为结尾的只有在第三组窗口为当前窗口时才可以使用。
4、如果限制这里是空的没有填写,则默认为所有窗口均可使用。
5、除了单击,双击,可以增加3击,4击,5击……N击为键名的热键。对应点击次数及任务。
6 、增加完毕热键,关闭ini文件。重新启用下脚本。热键就可以使用啦。

三、其它说明
1、目前在xp 5.1.26测试良好。ahk版本1.1.2.6.01
2、目前主要使用ini文件增删快捷键,有兴趣可以帮忙做一个界面出来。主要用来读写ini配置
3、己编译版本使用时因为调用键盘记录。所以请将脚本设为白名单再运行或者关闭安全软件。否则软件不起作用。
4、ESC退出脚本。Win+ESC为脚本热键开关
5、纯属个人好爱制作。欢迎大神指点。如有意见。可联系QQ:752481409反馈

6、如有共同爱好者,可申请共同完善。欢迎合作。点击链接加入群聊[懒人脚本]:https://jq.qq.com/?_wv=1027&k=5ENcmjX

最后,附源码及函数,ini文件下载包

[专栏]超级热键[专栏]超级热键

给TA捐赠
共{{data.count}}人
人已捐赠
其他

[专栏]积木AHK,一个简单的可定制的ahk编辑工具

2018-8-30 22:14:34

其他应用

AHK 完成 两个游戏窗口同时按键,游戏多开使用

2018-9-5 9:00:02

5 条回复 A文章作者 M管理员
  1. AHK中文社区

    加油

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