用 AHK 假装实现了下拉式命令行窗口……

反正基本上可以用,效果说不上很美好。

因为命令行我使用的是 Fluent Terminal,而这是一个 UWP 应用,所以在启动程序的方法上,我投机取巧的用了一个快捷方式。反正如果你想使用这个脚本的话,肯定要对窗口匹配条件进行一定的修改,还有就是这个启动用的快捷方式的位置也要重新设定。

然后就是不知道如何隐藏命令行窗口在任务栏上的图标,十分完美的露馅儿……

; 定义显示窗口函数
showFTWin()
{
  ; 将原有的隐藏窗口显示出来,以便在下一步中获取应用窗口的 ID
  WinShow, ahk_class ApplicationFrameWindow, Fluent Terminal
  ; 获取应用的窗口 ID
  WinGet, FT, , ahk_class ApplicationFrameWindow, Fluent Terminal
  ; 如果 ID 为空,则启动此应用
  if(FT == ""){
    ; 因为是 UWP 应用,我投机取巧创建了一个快捷方式来运行它
    Run "C:\Users\dms\Desktop\Fluent Terminal.lnk"
    ; 循环等待,直到获取到窗口 ID
    while(FT == ""){
      WinGet, FT, , ahk_class ApplicationFrameWindow, Fluent Terminal
    }
    ; 将窗口最大化
    WinMaximize, ahk_id %FT%
  }else{
    ; 如果 ID 不为空,即窗口当前已存在,则执行展示动画
    ; 将窗口最大化
    WinMaximize, ahk_id %FT%
    ; 获取当前窗口的尺寸
    WinGetPos, , , Max_Width, Max_Height, ahk_id %FT%
    ; 设置当前窗口显示的矩形区,初始高度为 0
    WinSet, Region, 0-0 W%Max_Width% H0, ahk_id %FT%
    ; 激活当前窗口
    WinActivate, ahk_id %FT%
    ; 使当前窗口置顶
    WinSet, AlwaysOnTop, On, ahk_id %FT%
    ; 设置动画过程中的实时高度
    now_H := 0
    ; 如果实时高度小于窗口实际高度,则继续执行动画
    While(now_H<Max_Height)
    {
      ; 动画过程中高度的递增量,籍此可以调整动画速度
      now_H += 10
      ; 控制取值范围
      now_H := now_H>Max_Height ? Max_Height : now_H
      ; 重新设置窗口裁切面积
      WinSet, Region, 0-0 W%Max_Width% H%now_H%, ahk_id %FT%
    }
  }
}
; 定义隐藏窗口函数
hideFTWin()
{
  WinGet, FT, , ahk_class ApplicationFrameWindow, Fluent Terminal
  ; 如果 ID 为空,则启动此应用
  if(FT == "")
  {
    return
  }
  ; 获取当前窗口的尺寸
  WinGetPos, , , Now_Width, Now_Height, ahk_id %FT%
  ; 设置当前窗口显示的矩形区,初始尺寸为窗口的原尺寸
  WinSet, Region, 0-0 W%Now_Width% H%Now_Height%, ahk_id %FT%
  ; 设置动画过程中的实时高度
  now_H := Now_Height
  ; 如果实时高度大于 0,则继续执行动画
  While(now_H>0)
  {
    ; 动画过程中高度的递减量,籍此可以调整动画速度
    now_H -= 10
    ; 控制取值范围
    now_H := now_H<0 ? 0 : now_H
    ; 重新设置窗口裁切面积
    WinSet, Region, 0-0 W%Now_Width% H%now_H%, ahk_id %FT%
  }
  ; 动画执行过后隐藏此窗口
  WinHide, ahk_id %FT%
  ; 取消窗口置顶
  WinSet, AlwaysOnTop, Off, ahk_id %FT%
}
; 将窗口隐藏
hideFTWin()
; 当快捷键触发
#o::
  showFTWin()
  return
; 当目标程序窗口处于激活状态,则启用退出快捷键
#IfWinActive, ahk_class ApplicationFrameWindow, Fluent Terminal
Esc::
  hideFTWin()
  return
1 Like