minimize/restore 通过热键切换 Gui 的问题
Issues with minimize/restore toggle for Gui via Hotkey
我正在为我的工作区开发一个基于 Gui 的工具,以提供简单的文本粘贴和 WinMinimize/WinRestore 功能。我面临的问题是 minimize/restore 切换功能。
我目前使用的代码详述如下:
; Functions
; }-----------------------------------------------------------------------{
GuiToggle()
{
Sleep, 50
if WinActive("ServiceDeskAssist")
{
Gui, -AlwaysOnTop
WinMinimize, ServiceDeskAssist
WinWaitNotActive, ServiceDeskAssist
}
else
{
WinRestore, ServiceDeskAssist
WinActivate, ServiceDeskAssist
WinWaitActive, ServiceDeskAssist
Gui, +AlwaysOnTop
}
Sleep, 50
}
; Hotkeys
; }-----------------------------------------------------------------------{
^z::GuiToggle()
这个想法是根据 Gui 的当前状态切换到 minimize/restore,但是如果 Gui 存在但仍然可见(即 +AlwaysOnTop)它不是 "Active" 所以它将被恢复而不是最小化。
有什么办法可以纠正这个功能吗?
除非ServiceDeskAssist
是一个super-global变量,否则if WinActive(ServiceDeskAssist)
是错误的。
WinMinimize, ServiceDeskAssist
将 ServiceDeskAssist
用作文字,而不是字符串(我认为您打算为 IF 语句执行此操作)
WinRestore
不会自动激活
; Functions
; }-----------------------------------------------------------------------{
GuiToggle()
{
Sleep, 50
if WinActive("ServiceDeskAssist")
{
Gui, -AlwaysOnTop
WinMinimize, ServiceDeskAssist
WinWaitNotActive, ServiceDeskAssist
}
else
{
WinRestore, ServiceDeskAssist
WinActivate, ServiceDeskAssist
WinWaitActive, ServiceDeskAssist
Gui, +AlwaysOnTop
}
Sleep, 50
}
; Hotkeys
; }-----------------------------------------------------------------------{
^z::GuiToggle()
此外,为什么不将 window 的标题传递给函数?这样就变成了 re-usable
; Functions
; }-----------------------------------------------------------------------{
GuiToggle(winTitle)
{
Sleep, 50
if WinActive(winTitle)
{
Gui, -AlwaysOnTop
WinMinimize, % winTitle
WinWaitNotActive, % winTitle
}
else
{
WinRestore, % winTitle
WinActivate, % winTitle
WinWaitActive, % winTitle
Gui, +AlwaysOnTop
}
Sleep, 50
}
; Hotkeys
; }-----------------------------------------------------------------------{
^z::GuiToggle("ahk_class Notepad")
好的,看来 WinGet - MinMax 是前进的方向。
以下代码运行顺利:
; Functions
; }-----------------------------------------------------------------------{
GuiToggle()
{
Sleep, 50
WinGet, WinState, MinMax, ServiceDeskAssist
If(WinState==0||WinState==1)
{
Gui, -AlwaysOnTop
WinMinimize, ServiceDeskAssist
WinWaitNotActive, ServiceDeskAssist
}
else if(WinState==-1)
{
WinRestore, ServiceDeskAssist
WinActivate, ServiceDeskAssist
WinWaitActive, ServiceDeskAssist
Gui, +AlwaysOnTop
}
Sleep, 50
}
Toggle(a)
{
Sleep, 50
WinGet, WinState, MinMax, % a
If(WinState==0||WinState==1)
{
WinMinimize, % a
WinWaitNotActive, % a
}
else if(WinState==-1)
{
WinRestore, % a
WinActivate, % a
WinWaitActive, % a
}
Sleep, 50
}
; Hotkeys
; }-----------------------------------------------------------------------{
^x::ExitApp
^z::GuiToggle()
我正在为我的工作区开发一个基于 Gui 的工具,以提供简单的文本粘贴和 WinMinimize/WinRestore 功能。我面临的问题是 minimize/restore 切换功能。
我目前使用的代码详述如下:
; Functions
; }-----------------------------------------------------------------------{
GuiToggle()
{
Sleep, 50
if WinActive("ServiceDeskAssist")
{
Gui, -AlwaysOnTop
WinMinimize, ServiceDeskAssist
WinWaitNotActive, ServiceDeskAssist
}
else
{
WinRestore, ServiceDeskAssist
WinActivate, ServiceDeskAssist
WinWaitActive, ServiceDeskAssist
Gui, +AlwaysOnTop
}
Sleep, 50
}
; Hotkeys
; }-----------------------------------------------------------------------{
^z::GuiToggle()
这个想法是根据 Gui 的当前状态切换到 minimize/restore,但是如果 Gui 存在但仍然可见(即 +AlwaysOnTop)它不是 "Active" 所以它将被恢复而不是最小化。 有什么办法可以纠正这个功能吗?
除非ServiceDeskAssist
是一个super-global变量,否则if WinActive(ServiceDeskAssist)
是错误的。
WinMinimize, ServiceDeskAssist
将 ServiceDeskAssist
用作文字,而不是字符串(我认为您打算为 IF 语句执行此操作)
WinRestore
不会自动激活
; Functions
; }-----------------------------------------------------------------------{
GuiToggle()
{
Sleep, 50
if WinActive("ServiceDeskAssist")
{
Gui, -AlwaysOnTop
WinMinimize, ServiceDeskAssist
WinWaitNotActive, ServiceDeskAssist
}
else
{
WinRestore, ServiceDeskAssist
WinActivate, ServiceDeskAssist
WinWaitActive, ServiceDeskAssist
Gui, +AlwaysOnTop
}
Sleep, 50
}
; Hotkeys
; }-----------------------------------------------------------------------{
^z::GuiToggle()
此外,为什么不将 window 的标题传递给函数?这样就变成了 re-usable
; Functions
; }-----------------------------------------------------------------------{
GuiToggle(winTitle)
{
Sleep, 50
if WinActive(winTitle)
{
Gui, -AlwaysOnTop
WinMinimize, % winTitle
WinWaitNotActive, % winTitle
}
else
{
WinRestore, % winTitle
WinActivate, % winTitle
WinWaitActive, % winTitle
Gui, +AlwaysOnTop
}
Sleep, 50
}
; Hotkeys
; }-----------------------------------------------------------------------{
^z::GuiToggle("ahk_class Notepad")
好的,看来 WinGet - MinMax 是前进的方向。 以下代码运行顺利:
; Functions
; }-----------------------------------------------------------------------{
GuiToggle()
{
Sleep, 50
WinGet, WinState, MinMax, ServiceDeskAssist
If(WinState==0||WinState==1)
{
Gui, -AlwaysOnTop
WinMinimize, ServiceDeskAssist
WinWaitNotActive, ServiceDeskAssist
}
else if(WinState==-1)
{
WinRestore, ServiceDeskAssist
WinActivate, ServiceDeskAssist
WinWaitActive, ServiceDeskAssist
Gui, +AlwaysOnTop
}
Sleep, 50
}
Toggle(a)
{
Sleep, 50
WinGet, WinState, MinMax, % a
If(WinState==0||WinState==1)
{
WinMinimize, % a
WinWaitNotActive, % a
}
else if(WinState==-1)
{
WinRestore, % a
WinActivate, % a
WinWaitActive, % a
}
Sleep, 50
}
; Hotkeys
; }-----------------------------------------------------------------------{
^x::ExitApp
^z::GuiToggle()