Назначьте горячие клавиши для окон (и запомните размер и местоположение).AHK - PullRequest
0 голосов
/ 14 мая 2010

Я нашел следующий скрипт для динамического назначения горячих клавиш для уже открытых окон:

Code (Expand):
Loop 10
{
   i := A_Index - 1
   HotKey #^%i%,DynHotkey
   HotKey #%i%, DynHotkey
   HotKey #!%i%,DynHotkey
}
Exit

DynHotkey:
   StringRight i, A_ThisHotKey, 1
   StringMid what,A_ThisHotKey, 2, 1
   var := var%i%
   IfEqual what, ^, WinGet var%i%, ID, A  ; Save ID
   Else IfEqual what,!, WinMinimizeAll    ; MinimizeAll
   WinRestore  ahk_id %var%
   WinActivate ahk_id %var%               ; Switch
Return

(код был скопирован из этой темы http://www.autohotkey.com/forum/topic38773.html&highlight=dynamic+hot+key)

С помощью приведенного выше сценария вы можете:

  1. Используйте Win + Ctrl + 0..9 до прикрепление горячей клавиши к текущему активному окну.
  2. Используйте Win + 0..9 к , чтобы переключить в соответствующее окно.

Однако, если я назначаю горячую клавишу данному окну (используя Win + Ctrl + 0..9), а затем хочу вернуться в это окно (Win + 0..9), окно сбросить на новый размер и местоположение.

Есть ли способ сохранить размер и расположение окна вместе с его идентификатором?

Если это так, как будет выглядеть сценарий?

Я запускаю приведенный выше сценарий в 64-разрядной версии Windows 7.

Большое спасибо,

Ответы [ 2 ]

1 голос
/ 31 июля 2010

Вам не нужно усложнять код:)

Быстрый вопрос: если ваше окно свернуто, у вас нет проблем, верно? «Проблема» в коде - WinRestore.

Дело в том, что если окно не свернуто, а затем вы делаете WinRestore, оно изменит размер и положение на его "не развернутую" версию.

WinActivate автоматически выполняет WinRestore, только если окно свернуто, поэтому вы можете безопасно удалить строку 16 (WinRestore), поскольку WinActivate будет делать то, что вам нужно.

- изменить -

Вот как должен выглядеть код:

Loop 10
{
    i := A_Index - 1
    HotKey #^%i%,DynHotkey
    HotKey #%i%, DynHotkey
    HotKey #!%i%,DynHotkey
}
Exit

DynHotkey:
    StringRight i, A_ThisHotKey, 1
    StringMid what,A_ThisHotKey, 2, 1
    var := var%i%
    IfEqual what, ^, WinGet var%i%, ID, A  ; Save ID
    Else IfEqual what,!, WinMinimizeAll    ; MinimizeAll
    WinActivate ahk_id %var%               ; Switch
Return

Я проверил, работает отлично.

0 голосов
/ 14 мая 2010

Вы можете использовать WinGetPos, чтобы прочитать фактическую позицию и сохранить ее. Затем вы можете использовать WinMove, чтобы установить позицию. Вот список функций: http://www.autohotkey.com/docs/commands.htm.

...