WinActivate 在自动热键脚本中不起作用

Posted

技术标签:

【中文标题】WinActivate 在自动热键脚本中不起作用【英文标题】:WinActivate not working in autohotkey script 【发布时间】:2015-02-25 12:59:45 【问题描述】:

我有以下 AutoHotKey 脚本来帮助我使用快捷方式在不同打开的应用程序之间切换:

^!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。

【问题讨论】:

您的代码在我的 PowerShell(Windows 8 64 位)上运行良好,我想知道那里有什么问题。 您是否以管理员身份运行 PowerShell,但以普通用户身份运行 AutoHotkey?当我这样做时(在 Windows 7 64 位机器上),我无法恢复最小化的 PowerShell 窗口。 以管理员身份运行 AutoHotkey 解决了以管理员身份运行的 PowerShell 窗口恢复/最小化的问题。 是的!就是这样!我以管理员身份运行 PowerShell 并以管理员身份运行 AHK 也解决了这个问题。谢谢! 【参考方案1】:

尝试在您的脚本中添加#WinActivateForce。

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

【讨论】:

谢谢,我添加了,但没有任何变化。【参考方案2】:

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

根据AutoHotkey's release notes,这是一个已知问题,已在 AutoHotkey v1.1.20 中修复。 (在提出这个问题后 1 个月发布)

1.1.20.00 - March 8, 2015

变化

更改了 WinActivate 以恢复已激活但已最小化的窗口。 更改了 WinActivate 以在 DetectHiddenWindows 关闭且活动窗口被隐藏时查找可见窗口以激活,而不是 什么都不做

【讨论】:

以上是关于WinActivate 在自动热键脚本中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

CTRL+V 在 PyAutoGUI、Windows 上的 Python 3 中不起作用

Vimeo 视频自动播放在 Safari 11 中不起作用:NotAllowedError

界面最小化时热键不起作用

为啥 button.click() 在我的脚本中不起作用?

Click() 函数在量角器脚本中不起作用

为啥热键在某些桌面应用程序上不起作用?