热键的效果:

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
}

  

最新文章

  1. 关于 WP 开发中.xaml 与.xaml.cs 的关系
  2. [.NET Core].NET Core R2安装教程及Hello示例
  3. [转]ORACLE函数大全
  4. Web页面多对象多文档事件冲突的解决方案
  5. 文件和目录:access函数
  6. SPI试验---verilog(实用单通模式)
  7. Bootstrap_表单
  8. HDOJ/HDU 1984 Mispelling4(删除第n个字符~)
  9. UESTC_菲波拉契数制升级版 2015 UESTC Training for Dynamic Programming<Problem L>
  10. Unity3D根据游戏的发展Terrain Toolkit地形生产
  11. mysql建表: 主键,外键约束
  12. calling c++ from golang with swig--windows dll 二
  13. Eeffective C++ 读书笔记( 32-38)
  14. [linux]孤儿进程与僵尸进程
  15. 嵌套For循环性能优化案例
  16. Jupyter Notebook 快捷键使用指南
  17. Mongodb: Sort operation used more than the maximum 33554432 bytes of RAM
  18. 拒绝服务(DoS)理解、防御与实现
  19. Netty学习路线总结
  20. Centos7系统详细的启动流程

热门文章

  1. visio 使用技巧汇总
  2. GUI JFrame窗体介绍:
  3. P4332 [SHOI2014]三叉神经树(LCT)
  4. POJ 2421 Constructing Roads(最小生成树)
  5. DJ 算法的队列优先优化
  6. POJ 2299 Ultra-QuickSort (树状数组 && 离散化&&逆序)
  7. Go语言基础之9--指针类型详解
  8. python3 生成器笔记
  9. man bash 关于shell的应有尽有 语法、快捷键...
  10. mysql 操作数据库创建,增删改查