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 中不起作用