通过热键对Gui进行最小化/还原切换的问题

时间:2019-04-25 15:19:50

标签: autohotkey

我正在为我的工作区使用基于Gui的工具,以提供简单的文本粘贴和WinMinimize / 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()

这个想法是根据Gui的当前状态来使切换最小化/恢复,但是如果Gui存在但仍然可见(即+ AlwaysOnTop),则它不是“活动的”,因此它将被还原而不是最小化。 有什么办法可以纠正此功能?

2 个答案:

答案 0 :(得分:0)

除非ServiceDeskAssist是超全局变量,否则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()

此外,为什么不将窗口标题传递给函数呢?这样,它就可以重复使用

;                               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")

答案 1 :(得分:0)

好的,所以看来WinGet-MinMax是前进的道路。 以下代码正常运行:

funr::get_script_path()