反正基本上可以用,效果说不上很美好。
因为命令行我使用的是 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