我想要一个功能,例如当您按“Win”和“d”时您会看到桌面,如果您再次按它,它会恢复所有窗口。
如何在 AHK 中实现这一点,但只有活动窗口?
更新:
添加了以下代码,但再次按 ALT+s 仍无法恢复最小化窗口。
!s::
WinGet, active_id, ID, A
if (toggle:=!toggle)
WinMinimize, ahk_id %active_id%
else
WinRestore, ahk_id %active_id%
Return
Win+Down 快捷方式可以执行此操作,但功能会根据活动的特定窗口而有所不同。给定一个最大化的窗口,通常使用 Win+Down 快捷键向下两次通常可以达到您想要的效果。
因此,将Win+Down 快捷方式替换为 2x Win+Down 如下所示:
#d::
Send #{down}
Send #{down}
return
或者,使用 ahk 内置的 WinMinimize 函数(这可能会更好):
#d::WinMinimize, A
更新:添加了请求的恢复功能
Toggle:=0
#d::
Toggle^=1
if(Toggle){
WinGetTitle, name, A
WinMinimize, %name%
}
else
WinRestore, %name%
return
更新2: 更可靠的基于 hwnd 的版本由 0x464e (MWE for hwnd) 的评论提供
#d::
if (toggle:=!toggle)
WinMinimize, % "ahk_id " _hwnd := WinExist("A")
else
WinRestore, % "ahk_id " _hwnd
return
#Requires AutoHotkey v2.0
#SingleInstance Force
#NoTrayIcon
MINIMIZED := []
STATE_MINIMIZED := -1
return
; Win + Alt + Down = Minimize Window
#!Down::
{
global
for index, winid in MINIMIZED
{
if (!WinExist(winid) || WinGetMinMax(winid) != STATE_MINIMIZED)
{
MINIMIZED.RemoveAt(index)
}
}
if (hwnd := WinExist("A"))
{
winid := "ahk_id " hwnd
if (WinGetMinMax(winid) != STATE_MINIMIZED)
{
PostMessage 0x0112, 0xF020, 0,, winid ; 0x0112 = WM_SYSCOMMAND, 0xF020 = SC_MINIMIZE
MINIMIZED.Push(winid)
}
}
}
; Win + Alt + Up = Restore Window
#!Up::
{
global
for index, winid in MINIMIZED
{
if (!WinExist(winid) || WinGetMinMax(winid) != STATE_MINIMIZED)
{
MINIMIZED.RemoveAt(index)
}
}
if (MINIMIZED.Length)
{
winid := MINIMIZED.Pop()
PostMessage 0x0112, 0xF120, 0,, winid ; 0x0112 = WM_SYSCOMMAND, 0xF120 = SC_RESTORE
}
}
; example for binding ctrl+d to show/hide notepad
^d::{
; check whether notepad already started yet
if WinExist("ahk_exe notepad.exe") {
; minimize window if active, restore it if not
if WinActive("ahk_exe notepad.exe") {
WinMinimize
} else {
WinActivate
}
} else {
; start notepad.exe and wait until it comes into existence
Run "notepad.exe"
WinWait("ahk_exe notepad.exe")
}
}