Что нового

Как применить двойное действие на общую горячую клавишу

dr.room

Новичок
Сообщения
283
Репутация
0
Версия AutoIt: 3.
AutoIt v3.3.14.2
Описание:

Всем доброго времени суток

Такой вопрос: существует ли возможность установить общую горячую клавишу для вызова 2-х разных действий? Т.е. к примеру нажимаю Alt + W чтобы активировать окно блокнота. При повторном нажатии – должно активировать окно, что было активным до этого, как бы возвращая исходно окно на место
Спасибо заранее


Примечания:
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
HotKeySet("!w", "ChangeActive")

$Active = 0

While Sleep(1000)
WEnd

Func ChangeActive()
  If WinGetHandle("") = WinGetHandle("[class:Notepad]") Then
    WinActivate($Active)
  Else
    $Active = WinGetHandle("")
    WinActivate("[class:Notepad]")
  EndIf
EndFunc
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Спасибо
Если можно еще вопрос. Попытался сузить диапазон переключения до 2-х окон: блокнота и Google Chrome. Т.е. чтобы переключение проводилось между этими окнами
Мне казалось что можно было просто заменить
Код:
WinGetHandle("")

на
Код:
WinGetHandle("Google Chrome")

Но не сработало - где я ошибся ?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Если у вас всего два окна - Блокнот и Chrome - используйте Alt+Tab. Если окон больше, то непонятно, на какое окно переключаться, если активно "третье" окно.
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Идея не моя, но на практике - не плохо выходило.
Вот тут скачать программку можно, и тут почитать на русском
Жаль конечно...
ps
Да - третье окно есть. Это - MsgBox с параметром поверх окно.
 
A

Alofa

Гость
dr.room сказал(а):
Не понимаю чего жаль-то?
Вам уже дали почти готовый скрипт. Осталось собрать все кусочки пазла, добавить GUI и получится тот же самый "Rubilnik".
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
dr.room
Не понимаю. Если есть готовая программа, зачем кого-то просить сделать аналог? :stars:

третье окно есть
Изменил скрипт. Теперь переключает только между Chrome и блокнотом. Если активно "третье" окно, то Alt+W переключит на последнее активное из этих двух
Код:
HotKeySet("!w", "ChangeActive")

$Last = WinActivate("[RegexpTitle:.*Google Chrome]")
; $Last = WinActivate("[class:Notepad]")

While Sleep(1000)
WEnd

Func ChangeActive()
  Switch WinGetHandle("")
    Case WinGetHandle("[class:Notepad]")
      $Last = WinActivate("[RegexpTitle:.*Google Chrome]")
    Case WinGetHandle("[RegexpTitle:.*Google Chrome]")
      $Last = WinActivate("[class:Notepad]")
    Case Else
      WinActivate($Last)
  EndSwitch
EndFunc
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
@InnI
Спасибо это почти то что нужно
Единственно, скрипт в 2- х местах задумывается
1. Иногда не переключает окна, если не передать фокус на Chrome
Но это редка - может скрипт не знает какое окно в данный момент нужно активировать?
можно ли в этом случае настроить скрипт на переключение на окно с блокнотом, т.е. отдать ему приоритет.
2. Если скрипт обнаруживает "третье окно" то нужно повторное переключение: нельзя ли в случае обнаружения "третьего" окна перекоситься второй раз автоматически?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
dr.room
настроить скрипт на переключение на окно с блокнотом
Похоже, вы совсем разучились скрипты читать :(
Закомментируйте третью строчку и раскомментируйте четвёртую
Код:
; $Last = WinActivate("[RegexpTitle:.*Google Chrome]")
$Last = WinActivate("[class:Notepad]")


второй раз автоматически
Если я правильно понял
Код:
...
    Case Else
      WinActivate($Last)
      Send("!w") ; <= добавить
  EndSwitch
...
 
Верх