用AutoHotkey一键打开、激活、或隐藏Chrome(或其他软件)
热键的效果:
1、Chrome没打开时,打开Chrome
2、Chrome已打开,未激活时,则激活Chrome
3、Chrome已激活,则隐藏Chrome
本来这种功能对AutoHotkey来说非常简单,
但是在激活Chrome或FireFox浏览器的时候却总是无效,
经朋友指点是有些程序的窗口会存在N个子窗口,
所以增加了寻找主窗口HWND的过程,就可以正常激活了。
完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | #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 } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步