WinActivate无法在autohotkey脚本中工作

时间:2015-02-25 12:59:45

标签: windows-7 autohotkey taskmanager

我有以下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。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

  

如果您明确地最大限度地减少了问题"应用程序然后你永远不会   使用AHK快捷方式激活/最大化窗口。我不确定是否   还有其他方案可以防止快捷方式工作但是   这是复制问题的一种特定方式(至少对我而言)。

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

  

1.1.20.00 - March 8, 2015

     

更改

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