在win11下,我自用的ahk脚本和RA产生了冲突,当使用自用脚本激活或打开youdaonote、matlab、vscode等软件时,RA就无法使用了。(这个问题,目前应该是win11才有,因为我另一台win10的电脑没有这种情况)。
;脚本test.ahk
;{………………………………………………………………………………………………tab热键
$Tab:: send {Tab}
$^Tab:: send ^{Tab}
$#Tab:: send #{Tab}
$+Tab:: send +{Tab}
Tab & v:: ;函数调用方式
hyf_onekeyWindow("D:\VS Code\Code.exe", "Chrome_WidgetWin_1", "\S")
return
;================造成干扰的函数=======================;
hyf_onekeyWindow(exePath, titleClass := "", titleReg := "")
{ ;有些窗口用Ahk_exe exeName判断不准确,所以自定义个titleClass;https://www.autohotkey.com/docs/commands/SplitPath.htm
SplitPath, exePath, exeName, , , noExt
If !hyf_processExist(exeName)
{
;hyf_tooltip("启动中,请稍等...")
Run,% exePath
;打开后自动运行 TODO
funcName := noExt . "_runDo"
If IsFunc(funcName)
{
;hyf_tooltip("已自动执行函数:" . funcName)
Func(funcName).Call()
}
Else If titleClass
{
WinWait, Ahk_class %titleClass%, , 1
WinActivate Ahk_class %titleClass%
}
}
Else If WinActive("Ahk_exe " . exeName) ;有进程存在,最小化,鼠标活动窗口激活
{
funcName := noExt . "_hideDo"
If IsFunc(funcName)
Func(funcName).Call()
; WinHide
;WinSet, Bottom ;置于底层,但是没有最小化
WinMinimize
;激活鼠标所在窗口 TODO
MouseGetPos, , , idMouse
WinActivate Ahk_id %idMouse%
}
Else
{
If titleReg
titleClass := "Ahk_id " . hyf_getMainIDOfProcess(exeName, titleClass, titleReg)
Else If titleClass
titleClass := "Ahk_class " . titleClass
Else
titleClass := "Ahk_exe " . exeName
WinShow %titleClass%
WinActivate %titleClass%
funcName := noExt . "_activeDo"
If IsFunc(funcName)
{
;hyf_tooltip("已自动执行函数:" . funcName)
Func(funcName).Call()
}
WinMaximize
}
}
hyf_processExist(n) ;判断进程是否存在(返回PID)
{ ;n为进程名
Process, Exist, %n% ;比IfWinExist可靠
Return ErrorLevel
}
hyf_tooltip(str, t := 1, ExitScript := 0, x := "", y := "") ;提示t秒并自动消失
{
t *= 1000
ToolTip, %str%, %x%, %y%
SetTimer, hyf_removeToolTip, -%t%
If ExitScript
{
Gui, Destroy
Exit
}
}
hyf_getMainIDOfProcess(exeName, cls, titleReg := "") ;获取类似chrome等多进程的主程序ID
{
DetectHiddenWindows, On
WinGet, arr, List, Ahk_exe %exeName% ;获得程序的exe应用列表,返回的是唯一ID
Loop,% arr ;创建列表内的循环
{
n := arr%A_Index%
WinGetClass, classLoop, Ahk_id %n%
;MsgBox,% A_Index . "/" . arr . "`n" . classLoop . "`n" . cls
If (classLoop = cls)
{
If !StrLen(titleReg) ;不需要判断标题
Return n
WinGetTitle, titleLoop, Ahk_id %n%
;MsgBox,% A_Index . "/" . arr . "`n" . classLoop . "`n" . titleLoop
If (titleLoop ~= titleReg)
Return n
}
Continue
}
Return False
}
hyf_removeToolTip() ;清除ToolTip
{
ToolTip
}
RA是什么东西?
RA是runany,ahk开发的快捷启动软件,很好用的,推荐
哦 系统层我用utools,ahk方面我有自己写的常驻ahk来实现调用各个脚本 应该用不上ra了