记录:RA无法在win11系统下vscode运行的问题和解决

在win11下,我自用的ahk脚本和RA产生了冲突,当使用自用脚本激活或打开youdaonote、matlab、vscode等软件时,RA就无法使用了。(这个问题,目前应该是win11才有,因为我另一台win10的电脑没有这种情况)。

自用脚本中有几个复杂的函数,对RA造成了干扰。这几个函数是我用来一键激活/或启动程序的。我的解决方案是:把这几个函数另存为一个ahk文件,然后通过Inculde的方式调用,然后问题就解决了。
为了帮助更多人,把这个经历分享出来,RA如果不能运行很有可能是自己的ahk脚本和RA产生了冲突。
;=======================================;
另外,我把自己用的函数和调用方式也发出来,希望有大佬帮忙分析原因。
假设影响RA运行的代码名称为test.ahk
;脚本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
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

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

使用vim写ahk脚本的小白日记(1)解决vim的ahk代码缩进

2022-10-13 9:10:12

其他应用

一个获取鼠标指针下面文件信息的示例

2022-10-13 14:59:16

3 条回复 A文章作者 M管理员
  1. usnake

    RA是什么东西?

    • VVXahk

      RA是runany,ahk开发的快捷启动软件,很好用的,推荐

      • usnake

        哦 系统层我用utools,ahk方面我有自己写的常驻ahk来实现调用各个脚本 应该用不上ra了

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