zoukankan      html  css  js  c++  java
  • 用AutoHotkey一键打开、激活、或隐藏Chrome(或其他软件)

    热键的效果:

    1、Chrome没打开时,打开Chrome

    2、Chrome已打开,未激活时,则激活Chrome

    3、Chrome已激活,则隐藏Chrome

    本来这种功能对AutoHotkey来说非常简单,

    但是在激活Chrome或FireFox浏览器的时候却总是无效,

    经朋友指点是有些程序的窗口会存在N个子窗口,

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

    完整代码如下:

    #a::hyf_onekeyWindow("d:ChromeChrome.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
    }
    

      

  • 相关阅读:
    九度OJ 1031:xxx定律 (基础题)
    九度OJ 1030:毕业bg (01背包、DP)
    九度OJ 1029:魔咒词典 (排序)
    九度OJ 1028:继续畅通工程 (最小生成树)
    九度OJ 1027:欧拉回路 (欧拉回路)
    九度OJ 1026:又一版 A+B (进制转换)
    九度OJ 1025:最大报销额 (01背包、DP)
    九度OJ 1024:畅通工程 (最小生成树)
    九度OJ 1023:EXCEL排序 (排序)
    九度OJ 1022:游船出租 (统计)
  • 原文地址:https://www.cnblogs.com/hyaray/p/6660301.html
Copyright © 2011-2022 走看看