Windows 7 WinActivate在自动热键脚本中不工作

Windows 7 WinActivate在自动热键脚本中不工作,windows-7,autohotkey,taskmanager,Windows 7,Autohotkey,Taskmanager,我有以下自动热键脚本,可帮助我使用快捷方式在不同打开的应用程序之间切换: ^!c::ToggleWindow("Chrome") ^!p::ToggleWindow("PowerShell") ToggleWindow(TheWindowTitle) { SetTitleMatchMode,2 DetectHiddenWindows, Off IfWinActive, %TheWindowTitle% { WinMinimize, %TheWi

我有以下自动热键脚本,可帮助我使用快捷方式在不同打开的应用程序之间切换:

^!c::ToggleWindow("Chrome")
^!p::ToggleWindow("PowerShell")


ToggleWindow(TheWindowTitle)
{
    SetTitleMatchMode,2
    DetectHiddenWindows, Off
    IfWinActive, %TheWindowTitle%
    {
        WinMinimize, %TheWindowTitle%
    }
    Else
    {
        IfWinExist, %TheWindowTitle%
        {
            WinActivate
            ;;; Tried using WinMaximize/WinRestore here but same result
        }
        Else
        {
            DetectHiddenWindows, On
            IfWinExist, %TheWindowTitle%
            {
                WinShow
                WinActivate
            }
        }
    }
}
问题是,对于某些应用程序来说,它有时只能工作(例如,PowerShell和TortoiseHG Workbench),这确实令人沮丧。对于其他应用程序(Chrome、Thunderbird),它始终有效

以下是我到目前为止的发现:

  • 如果您明确最小化“有问题”的应用程序,那么您永远无法使用AHK快捷方式激活/最大化窗口。我不确定是否有其他情况会阻止快捷方式工作,但这是复制问题的一种特定方式(至少对我而言)

  • 即使在快捷方式不起作用的情况下,我也可以看到任务栏中的目标应用程序图标被高亮显示。我猜它有点半途而废,激活了窗口,但实际上并没有显示它

  • 我认为问题不仅仅局限于AutoHotKey,因为我可以通过任务管理器复制这种行为。如果我进入“应用程序”选项卡,右键单击目标应用程序并选择“带到前台”,同样的情况也会发生。但是,如果我选择“切换到”,它会工作

所以,我想我的问题是“任务管理器->应用程序->切换到”做什么,以及有没有一个等价物可以在AHK中使用。我的操作系统是Win7。

尝试在脚本中添加一个

如果您以普通用户身份运行AutoHotkey,它可能无法管理以管理员身份运行的程序(例如PowerShell)。如果是这种情况,请尝试以管理员身份运行AutoHotkey

如果你明确地最小化了一个“有问题”的应用程序,那么你永远也不会成功 使用AHK快捷方式激活/最大化窗口。我不确定 还有其他一些情况会阻止快捷方式工作,但是 这是复制问题的一种特定方式(至少对我而言)

根据,这是一个已知问题,已在AutoHotkey中修复。(此问题提出1个月后发布)

变化
  • 更改了WinActivate以还原已激活但最小化的窗口。
  • 已更改WinActivate,以便在DetectThiddenWindows关闭且活动窗口隐藏时(而不是隐藏时)查找要激活的可见窗口 无所事事

谢谢,我添加了它,但没有任何更改。您的代码在我的PowerShell(Windows 8 64位)中运行良好,我想知道那里有什么问题。您是否以管理员身份运行PowerShell,但以普通用户身份运行AutoHotkey?当我这样做时(在Windows 7 64位计算机中),我无法还原最小化的PowerShell窗口。以管理员身份运行AutoHotkey可以解决以管理员身份还原/最小化PowerShell窗口的问题。是!就这样!我以管理员的身份运行PowerShell,以管理员的身份运行AHK也解决了这个问题。非常感谢。