1 (изменено: OlegSmirnov, 2018-10-13 17:09:40)

Тема: AHK: Условие для нескольких #IfWinActive

Здравствуйте, специалисты по autohotkey.
Пытаюсь сделать скрипт.
Что-то не получается.


#IfWinActive 111.txt — Блокнот
#я::
#IfWinActive 222.txt — Блокнот
#я::
#IfWinActive 333.txt — Блокнот
#я::
#IfWinActive 444.txt — Блокнот
#я::


LButton::
  CoordMode, Mouse, Screen
  MouseGetPos, mX, mY, hWnd, 
  SendMessage, 0x84,, (mX & 0xFFFF)|(mY & 0xFFFF)<<16,, ahk_id %Hwnd%
  If ErrorLevel=20                               ; HTCLOSE


IfWinExist, 111.txt
    WinClose 111.txt 
IfWinExist, 222.txt
    WinClose 222.txt
IfWinExist, 333.txt
    WinClose 333.txt
IfWinExist, 444.txt
    WinClose 444.txt


  else
   Click Down
Return

LButton Up:: Click Up

По идее если щелкнуть по крестику любого из окон 111.txt, 222.txt, 333.txt, 444.txt (открытых в блокноте) - то все эти окна должны закрыться разом.
Но почему-то срабатывает только тогда, когда в коде прописано указание лишь на
#IfWinActive 111.txt — Блокнот

То есть если в начале кода #IfWinActive - только один.

Как сделать этот скрипт способным закрывать все четыре окна, по нажатию на крестик закрытия  - любого из них ?

Post's attachments

1.rar 183 b, 1 downloads since 2018-10-13 

You don't have the permssions to download the attachments of this post.

2

Re: AHK: Условие для нескольких #IfWinActive

stealzy, насчет GroupClose, моиОкнаБлокнота - а как код уздает - какие именно окна закрывать ?

Мне же нужно закрыть только четыре конкретных окна.

3

Re: AHK: Условие для нескольких #IfWinActive

stealzy пишет:
#IfWinActive 111.txt — Блокнот
#я:: ; ведет в никуда
#IfWinActive 222.txt — Блокнот
#я:: ; тоже ничего ни делает
#IfWinActive 333.txt — Блокнот
#я:: ; аналогично
#IfWinActive 444.txt — Блокнот
#я::  ; исполняет код ниже

Это не так. Создайте текстовый документ 111.txt, откройте его, запустите следующий код, и нажмите Win + я.

#IfWinActive 111.txt — Блокнот
#sc2c:: ; ведет в никуда
#IfWinActive 222.txt — Блокнот
#sc2c:: ; тоже ничего ни делает
#IfWinActive 333.txt — Блокнот
#sc2c:: ; аналогично
#IfWinActive 444.txt — Блокнот
#sc2c:: 
   MsgBox
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Условие для нескольких #IfWinActive

OlegSmirnov, непонятно, какую роль в вашем коде играет горячая клавиша Win + я.

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

5 (изменено: OlegSmirnov, 2018-10-13 22:30:16)

Re: AHK: Условие для нескольких #IfWinActive

stealzy, Прочитал справку по GroupAdd
И вот я тут написал - скрипт, согласно этой справке.


SetTitleMatchMode, 2
GroupAdd, GroupName1, 111.txt — Блокнот
GroupAdd, GroupName1, 222.txt — Блокнот
GroupAdd, GroupName1, 333.txt — Блокнот
GroupAdd, GroupName1, 444.txt — Блокнот
return ; Конец секции автовыполнения.

LButton::
  CoordMode, Mouse, Screen
  MouseGetPos, mX, mY, hWnd, 
  SendMessage, 0x84,, (mX & 0xFFFF)|(mY & 0xFFFF)<<16,, ahk_id %Hwnd%
  If ErrorLevel=20                               ; HTCLOSE


GroupClose, GroupName1 

  else
   Click Down
Return

LButton Up:: Click Up

В общем скрипт - не работает - никаких действий не выполняет.
Просто висит в трее и ни на что не реагирует.

6

Re: AHK: Условие для нескольких #IfWinActive

stealzy, нет названия окон я вписывал - как раз через ту самую программу Active Window Info.

stealzy пишет:

И зачем вам SetTitleMachMode 2? А LButton Up::Click Up зачем?

Ну потому что так в справке было написано (приведен пример)

Убрал -  SetTitleMachMode 2  и LButton Up::Click Up  - все равно не работает.
Скрипт просто висит в трее.

7

Re: AHK: Условие для нескольких #IfWinActive

stealzy пишет:

Значит редактировали скрипт в каком-нибудь офисном пакете, у них есть обыкновение превращать минус в тире.

Какие офисные пакеты ?
Открыл окно "Active Window Info" выделил там название окна, копировал, затем вставил в скрипт.

Вот два кода:
В одном в названии окна - тире, в другом минусы.


GroupAdd, GroupName1, 111.txt — Блокнот
GroupAdd, GroupName1, 222.txt — Блокнот
GroupAdd, GroupName1, 333.txt — Блокнот
GroupAdd, GroupName1, 444.txt — Блокнот

LButton::
  CoordMode, Mouse, Screen
  MouseGetPos, mX, mY, hWnd, 
  SendMessage, 0x84,, (mX & 0xFFFF)|(mY & 0xFFFF)<<16,, ahk_id %Hwnd%
  If ErrorLevel=20                               ; HTCLOSE


GroupClose, GroupName1 


  else
   Click Down
Return

LButton Up:: Click Up

GroupAdd, GroupName1, 111.txt - Блокнот
GroupAdd, GroupName1, 222.txt - Блокнот
GroupAdd, GroupName1, 333.txt - Блокнот
GroupAdd, GroupName1, 444.txt - Блокнот

LButton::
  CoordMode, Mouse, Screen
  MouseGetPos, mX, mY, hWnd, 
  SendMessage, 0x84,, (mX & 0xFFFF)|(mY & 0xFFFF)<<16,, ahk_id %Hwnd%
  If ErrorLevel=20                               ; HTCLOSE


GroupClose, GroupName1 


  else
   Click Down
Return

LButton Up:: Click Up

Оба кода - не работают ни с минусом, ни с тире.

8

Re: AHK: Условие для нескольких #IfWinActive

У мееня работает если заменить GroupClose, GroupName1 на WinClose ahk_group GroupName1.

9

Re: AHK: Условие для нескольких #IfWinActive

stealzy, а вот теперь все заработало.
Спасибо за совет.