用AutoHotkey一鍵打開、激活、或隱藏Chrome(或其他軟件)


熱鍵的效果:

1、Chrome沒打開時,打開Chrome

2、Chrome已打開,未激活時,則激活Chrome

3、Chrome已激活,則隱藏Chrome

本來這種功能對AutoHotkey來說非常簡單,

但是在激活Chrome或FireFox瀏覽器的時候卻總是無效,

經朋友指點是有些程序的窗口會存在N個子窗口,

所以增加了尋找主窗口HWND的過程,就可以正常激活了。

完整代碼如下:

#a::hyf_onekeyWindow("d:\Chrome\Chrome.exe", "Chrome_WidgetWin_1", "\S") ;注意修改Chrome路徑

hyf_onekeyWindow(exePath, titleClass := "", titleReg := "")
{ ;有些窗口用Ahk_exe exeName判斷不准確,所以自定義個titleClass
    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
        ;激活鼠標所在窗口 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()
        }
    }
}

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%
    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
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM