1

Тема: AHK: Переключение задач в Windows

Здравствуйте!
Я совсем-совсем новичок в скриптах. В прошлом тысячелетие у меня был очень небольшой опыт в С++, а на современном этапе - 2-3 простых макроса в LibreOffice. Подозреваю, что почти все языки программирования в чём-то сходны по алгоритму написания, но синтаксис и функции разные.
Про ваш форум я узнал только вчера и, пока, на нём не ориентируюсь. Если моя тема не в том разделе, прошу перенести её туда, где она будет по тематике. А если подобное где-то обсуждалось, что прошу поделится ссылкой на эту тему или обсуждение.

Что уже есть в наличие.
Макрос (basic LibreOffice), который запускает небольшой программируемый ("динамический") Диалог, где есть текстовое поле, две метки-надписи, кнопка "Остановка макроса" и кнопка "OK", на которую "подвязано" нажатие клавиши «ENTER».

Вот полностью алгоритм действий, который я хочу "завести" в макрос (и, скорее всего, в "содружестве" с каким-то скриптом).
До этого, уже открыта определенная страничка в Интернет-Браузере и окно её (странички) открыто не на весь экран монитора - под ним (окном Браузера) располагается Диалог, запускаемый моим макросом.
То есть на экране монитора одновременно видны два окна (Браузер и Диалог), но активируются они по очереди по нажатию клавиши «ENTER».
Когда активно окно Диалога, то после набора какого-то небольшого текста, взятого из Браузера и по нажатию клавиши «ENTER» происходит отработка Диалога (запись в полях меток-надписи каких-то сообщений, которые образуются от вносимого текста - этот код ещё в разработки) и активируется окно Браузера.
Там могут быть какие-то действия или нет, но обратный "переход" в окно Диалога (активации этого окно), также, происходит по нажатию клавиши «ENTER». По сути, это аналогично переключение задач в Windows по нажатию клавиш «ALT»+«TAB». Но предполагается, что работать с Диалогом предстоит достаточно долго и это нужно будет делать максимально быстро, то хотелось бы попробовать избежать лишних движений.

Мне посоветовали посмотреть в сторону метода AppActivate объекта WshShell - так, кстати, я и попал на ваш сайт и форум.
Да, метод работает из простого макроса в сторону окон Windows, но обратно (в макрос),  естественно, не переключает - это и понятно.
Но это не получается из Диалога. В том плане, что переключение происходит и, тут же, снова активируется окно Диалога. Поставить временную задержку не вариант, так как это время не определено - когда нужно будет всего секунда, а когда и 10 сек будет мало.


И, в итоге, что я, собственно, хочу попробовать "сваять".
Скрипт, в котором по нажатию клавиши «ENTER» можно будет программно переходить между окнами Windows (открытой страничкой Браузера и Диалогом (LibreOffice)).

Можно ли это, в принципе, сделать?
Если можно, то подскажите, пожалуйста, как это можно реализовать.

Если будет необходимо, то могу предоставить этот макрос Диалога.

2

Re: AHK: Переключение задач в Windows

Задача по клавише 'Enter' переключать два окна программ? Это легко сделать на AHK.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: Переключение задач в Windows

Благодарю за быстрый ответ. AHK - это AutoHotkey?
Я уже скачиваю информацию по этой программе.
Попробую разобраться.

4

Re: AHK: Переключение задач в Windows

Да верно, позволит многое автоматизировать.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

5

Re: AHK: Переключение задач в Windows

Если по моей задаче лучше всего (или легче, быстрее ...) использовать AHK, то можно попросить модераторов или администрацию форума перенести эту тему в нужный раздел.
Вероятнее всего, у меня будут вопросы - думается, что логичнее это делать в подходящем разделе.

6

Re: AHK: Переключение задач в Windows

Перенёс.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Переключение задач в Windows

Вот и пошли вопросы...
И для начало совсем "детские".

Первый вопрос не имеет непосредственного отношения к данной теме и, возможно, где-то обсуждался, тогда поделитесь, пожалуйста, ссылкой с решением этого вопроса.
У меня ОС: Windows 7 Максимальная SP1 только Русская.
Установлен ещё английский язык на клавиатуру и он "по умолчанию".
Установил программу AutoHotkey_1.1.33.10_setup
Стал тестировать примеры скриптов - с самых простых и, сразу же, понял, что у меня могут быть проблемы с этой программой.
Скрипт не выводит кириллический текст (заметил, что и некоторые другие символы - такие как: « ») - вместо них ромбики со знаком вопроса внутри. Понятно, что эта проблема связана с локалью на моём компе. Переустанавливать систему я не буду, но можно ли что-то сделать с программой AutoHotkey?


Кое-что я, уже, успел посмотреть по этой программе и наметился некий план для дальнейшего написания нужного скрипта.
Но есть несколько вопросов, которые хотелось бы обсудить.

Смог скриптом запустить файл где находится мой макрос с Диалогом, но не нашёл как можно сразу запустить нужный макрос (basic LO).

Вопросы по алгоритму по моей задачи.
Два окна (Диалог и Браузер) будут последовательно активироваться по нажатию клавиши «Enter». Может быть, можно задать клавише «Enter» "значение" «ALT»+«TAB»? Тогда при любом нажатие клавиши Enter (во время работы скрипта) будет переключение задач в Windows, то есть нужных мне окон.
Это всё, скорее всего, делается в цикле?
В моём макросе Диалог возвращает значения (1 - для продолжения/перезаписи; 0 - Cancel (выход из Диалогу по крестику вверху слева самого Диалога); 12 - результата обработчика событий по нажатия кнопки Закрытие макроса (но, по большому счёту, эту кнопку можно дефолтом тоже сделать Cancel)).
Как взять из макроса эти значения, что бы в скрипте завести его в Loop?
Или как-то по-другому выйти из цикла?

Может быть кто-нибудь подскажет ответы на мои вопросы.

Заранее спасибо.

8 (изменено: Alectric, 2022-02-17 06:39:26)

Re: AHK: Переключение задач в Windows

Проще, думаю, так:


#ifWinNotActive,имя окна
Enter::
WinActivate,имя того же окна
Return

Но такой вариант заблокирует клавишу Ентер в других окнах.

Пишу с телефона, могут быть ошибки.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

9

Re: AHK: Переключение задач в Windows

spets_proekt113 пишет:

Скрипт не выводит кириллический текст

Если установили ANSI версию — измените на Unicode (64 bit, если система 64-битная).

spets_proekt113 пишет:

Это всё, скорее всего, делается в цикле?

Не очень понятно, что вы имеете в виду. Переключаться с одного окна на другое можно так:

#If WinActive("имя первого окна")
Enter:: WinActivate, имя второго окна

#If WinActive("имя второго окна")
Enter:: WinActivate, имя первого окна
#If
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10 (изменено: spets_proekt113, 2022-02-18 05:25:52)

Re: AHK: Переключение задач в Windows

Вчера случилась такая запара, что только поздно-поздно вечером (или, даже, ночью) удалось протестировать коды и ответить.

Alectric пишет:

Но такой вариант заблокирует клавишу Ентер в других окнах.

Большое спасибо за желание помочь мне.
За время работы скрипта+моего Диалога будет переключение только между двумя окнами: Диалог (макрос LO) и какая-то Веб-страничка - другие приложения меня, на это время, не волнуют.
И, возможно, именно из-за этой блокировки Ентера нет переключения обратно - этот Код переключает только в окно, что прописано в скрипте.

Код в следующем сообщении рабочий, огромное спасибо за это teadrinker.

teadrinker пишет:

Не очень понятно, что вы имеете в виду.

Да при таком коде никакого цикла не надо - я, просто, не знал, что так можно.

Но есть один нюанс.
В моём Диалоге по нажатию клавиши «ENTER» происходит обработка несколько полей Диалога (текстовое и два надписей) и закрывается сам Диалог. Это я к тому, что может быть можно будет использовать какие-то переменные с этих элементов управления.
Как только Диалог закрылся, он, сразу же, открывается вновь. При этом, заполняются поля "Надпись" полученными результатами. Диалог выходит из цикла таких повторных действий по нажатию другой кнопки - "Остановка макроса".

Можно ли именно этот момент "поймать" в скрипте - когда Диалог в макросе перезагрузился?
Так как, по Вашему коду происходит переключение в окно Браузера, когда ещё не перезагрузился Диалог с новым сообщением в одном из поле "Надпись". А именно эта информация и будет нужна при работе с Веб-страничкой.
Я только позавчера узнал о существование этой программы, поэтому не знаю всех возможностей AutoHokey, но, вероятнее всего, что в данной программе это сделать не получится.
Как я понял, в программе AutoHotkey можно создавать скрипт со собственным Диалогом. А в таком скрипте можно будет определить этот момент - когда перезапускается Диалог?

Я пользуюсь русской офф-лайн справкой, которая подписана 2005 годом и когда некоторые коды в примерах начали выдавать ошибку или полностью не работают, то подумал, что справка устарела и новая версия программы немного с изменениями.
Но и во вложенной в архиве с инсталлятором англоязычной справке - там такие же нерабочие примеры. Во всяком случае, у меня так получилось - возможно, что-то не то делаю.

Поэтому, помимо выше-озвученного нюанса, у меня появилось ещё несколько вопросов.
Скрипт:

Hotkey, ^!a, , T5

выдает ошибку.

Это я к тому, что в этом же разделе есть рабочий скрипт:

Hotkey, RCtrl & RShift, AltTab

На его основе хотел сделать:

Hotkey, Enter, AltTab ; превращает горячую клавишу "Enter" в Alt-Tab.

Ошибку не выдает, но не работает как записано в скрипте. Как назначить Ентеру эту комбинацию клавиш - ALT+TAB?

Ещё два вопроса.
Можно ли из скрипта запустить макрос LO, который в конкретном файле?
Есть ли возможность из скрипта получить какие-либо значения переменных из макроса LO?


teadrinker пишет:

Если установили ANSI версию — измените на Unicode (64 bit, если система 64-битная).

Я, сразу же, установил версию Unicode 64 bit.
То, что скрипты не показывают кириллицу при выводе - может ли это быть из-за того, что у меня только Русская версия Wondows?

=========
Да, слишком много у меня вопросов - полночи уже сижу.
Но они не срочные - можно с ними разбираться по мере возможности.

11

Re: AHK: Переключение задач в Windows

spets_proekt113 пишет:

То, что скрипты не показывают кириллицу при выводе - может ли это быть из-за того, что у меня только Русская версия Wondows?

Убедитесь, что файл скрипта сохранён в кодировке UTF-8 с BOM.
Приведённые «неработающие» примеры команды Hotkey, очевидно, немного вводят в заблуждение. Они нужны не для создания горячих клавиш, а для динамического их изменения. Вам вообще эта команда, скорее всего, не понадобится, используйте синтаксис статических горячих клавиш, как в моём примере.

spets_proekt113 пишет:

слишком много у меня вопросов

Да, действительно, многовато. У нас есть правило: одна тема — один вопрос. Не стесняйтесь создавать отдельные темы с вопросами, но старайтесь давать внятные заголовки, и формулировать вопросы как можно более кратко и чётко. Перед тем, как создать тему, воспользуйтесь поиском по нашему или англоязычному форуму. Помните, что правильно заданный вопрос содержит половину решения (как только правильно сформулируете, поймёте, что именно нужно искать, и, возможно, вопрос отпадёт сам собой).

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Переключение задач в Windows

spets_proekt113

Слишком много текста, учитесь сокращать. AHK способен на многие вещи как другие языки. Главной особенностью является выполнения некоторых действий в пару строчек кода. В том числе получение текста из окон, обработка и замена. Можно и своё окно сделать, добавить всяких полезных функций и многое другое. Главное правильно сформулировать желаемое действие от программы.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

13

Re: AHK: Переключение задач в Windows

teadrinker пишет:

У нас есть правило: одна тема — один вопрос.

Если что - я, сначала, прочитал ПРАВИЛА ФОРУМА.
А если вопросы относятся непосредственно к самой теме?! А у новичков может быть очень много вопросов, но в рамках темы.
Согласен, что три последних вопроса: Hotkey, открытие макроса и значения переменных из макроса можно определить в отдельные темы.

Но, тогда, остается основной вопрос:
Есть ли возможность дополнить предложенный Вами скрипт, чтобы переключение в окно Браузера происходило когда перезапустится Диалог?
Уже после своего предыдущего сообщения я подумал, что в скрипте можно попробовать "отловить" нажатие Ентер, но не спешить переключаться в окно Браузера, а дать возможность перезапустить Диалог.
Ещё раньше, я пытался использовать Sleep и WinWait, но это только пауза и не помогло в моей проблеме.

14

Re: AHK: Переключение задач в Windows

spets_proekt113

Запишите видео, так всем станет ясно что нужно получить в итоге.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

15 (изменено: spets_proekt113, 2022-02-18 19:30:32)

Re: AHK: Переключение задач в Windows

Я отвечу себе сам - только что немного поэкспериментировал.
Вот такой код:

#If WinActive("имя окна браузера")
Enter:: WinActivate, Dialog
#If WinActive("Dialog")
Enter:: 
{
Send {Enter}
Sleep 100 
}
WinActivate, имя окна браузера
#If

делает то, что мне нужно.
Может быть, он только не совсем правильно записан, тогда поправьте меня.

=========
Остался только один вопрос - как открыть из скрипта макрос LO.
Если в этой теме не ответят, только создам отдельную тему.

16

Re: AHK: Переключение задач в Windows

spets_proekt113 пишет:

переключение в окно Браузера происходило когда перезапустится Диалог?

Я не совсем точно представляю, что происходит, но возможно помогут команды WinWaitClose и WinWait.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: Переключение задач в Windows

teadrinker пишет:

Я не совсем точно представляю, что происходит, но возможно помогут команды WinWaitClose и WinWait.

#If WinActive("имя окна браузера")
Enter:: WinActivate, Dialog
#If WinActive("Dialog")
Enter:: 
Send {Enter}
WinActivate, имя окна браузера
#If

Для задачи моего макроса + этот скрипт больше ничего и требуется в рамках этой темы "Переключение задач в Windows".
Ваш скрипт (ещё раз, Благодарю Вас за это), плюс дополнительно всего одна команда делает всё, что необходимо.
Мне думается, что в первом варианте скрипта (без этой команды Send), скрипт "перехватывал" нажатие клавиши «ENTER», а сам Диалог не получал его (Ентера). Тогда скрипт от себя отправляет это нажатие Ентера активному окну, то есть Диалогу - Диалог срабатывает как нужно и идет переключение в окно Браузера.

18

Re: AHK: Переключение задач в Windows

Я бы добавил в начало скрипта #UseHook, иначе посыл горячей клавишей самой себя может вызвать зацикливание. Хотя в данном конкретном случае оно, скорее всего, не произойдёт, так как меняется контекст.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder