2015-02-25 4 views
1

У меня есть следующий сценарий AutoHotKey, чтобы помочь мне переключаться между различными открытыми приложениями, с помощью ярлыка:не WinActivate работает в 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 только потому, что я могу воспроизвести это поведение только с помощью Диспетчера задач. Если я перейду на вкладку «Приложения», щелкните правой кнопкой мыши на целевом приложении и выберите «Привести на передний план», то же самое произойдет. НО, если я выбираю «Переключиться на», это сработает!

Так что, я думаю, мой вопрос, что именно делает «Task Manager-> Приложения-> Переключить на» делать и есть эквивалент, который можно использовать в АХК. Моя ОС - Win7.

+0

Вашего код работает отлично подходит для моей PowerShell (Windows 8 64- бит), интересно, в чем проблема. – fxam

+1

Вы запустили свой PowerShell в качестве администратора, но AutoHotkey как обычный пользователь? Когда я это делаю (на 64-разрядной машине Windows 7), я не могу восстановить свернутое окно PowerShell. – fxam

+1

Запуск AutoHotkey в качестве администратора решает проблему восстановления/минимизации окна PowerShell под управлением администратора. – fxam

ответ

1

Попробуйте ввести #WinActivateForce в свой скрипт.

Если вы запустили AutoHotkey как обычный пользователь, возможно, не удастся управлять программой, выполняемой как администратор (например, PowerShell). Если это так, попробуйте запустить AutoHotkey в качестве администратора.

+0

Спасибо, я добавил, но ничего не изменил. – Amati

1

Если вы явно минимизировать «проблемное» приложение, то вы никогда не может активировать/развернуть окно с помощью ярлыков AHK. Я не уверен, что есть , но есть другие сценарии, которые препятствуют работе ярлыков, но это один из способов репликации проблемы (по крайней мере, для меня).

Согласно AutoHotkey's release notes, это известная проблема, которая была зафиксирована в AutoHotkey v1.1.20. (Выпущенный 1 месяц после того, как этот вопрос был задан)

1.1.20.00 - March 8, 2015

Изменения

  • Изменено WinActivate восстановить окно, если уже активен, но свести к минимуму.
  • Изменено WinActivate искать видимое окно активации, если DetectHiddenWindows выключен и активное окно скрыто, а ничего не делая