1 (изменено: Вася Пупкин, 2011-10-09 08:27:29)

Тема: AHK: Если "событие", то "действие", иначе "закрыть"

Примерная схема скрипта:

    Тело1 (Первая часть скрипта)
Скрипт ожидает определённое событие, и выполняется если это событие наступило.


    Тело2 (Вторая часть скрипта)
Скрипт закрывается (например через 10 секунд), если событие в "Тело1" не наступило.

Пример скрипта:

    
 ; Тело1
WinWait, Безымянный - Блокнот, 
IfWinNotActive, Безымянный - Блокнот, , WinActivate, Безымянный - Блокнот, 
WinWaitActive, Безымянный - Блокнот, 

MouseClick, left,  177,  20


 ; Тело2
Sleep, 10000
Process, Close, AutoHotkey.exe

1) По сути мне нужно что бы эти две части скрипта запустились одновременно (Тело1 + Тело2). Обе части находятся в одном .ahk - файле (в одном скрипте).
2) Если это не возможно то мне нужно следующее:
а) Скрипт ожидает определённое событие:
ожидает открытия блокнота
б) и выполняет действие, если это событие наступило:
MouseClick, left,  177,  20
в) Скрипт закрывается (например через 10 секунд), если это событие  не наступило:
Process, Close, AutoHotkey.exe

P.s. Я привёл пример не рабочего скрипта, у меня происходит закрытие скрипта после того как событие наступило, а мне надо организовать закрытие в случае, если событие не наступило.
P.s.2. Случай с блокнотом, приведён в качестве примера.

Спасибо.

2

Re: AHK: Если "событие", то "действие", иначе "закрыть"

WinWait, ahk_class Notepad,, 10
If ErrorLevel
   ExitApp
Else
{
   WinActivate, ahk_class Notepad
   Click, 177, 20
}
Return

3

Re: AHK: Если "событие", то "действие", иначе "закрыть"

Прикольно, работает.

А как нибудь можно это в твоём скрипте:

ahk_class Notepad

заменить на это:

WinWait, Безымянный - Блокнот, 
IfWinNotActive, Безымянный - Блокнот, , WinActivate, Безымянный - Блокнот, 
WinWaitActive, Безымянный - Блокнот,

И что бы скрипт работал.
А то я не понимяю что такое ahk_class, и как с ним работать.

Или куда мне сдесь добавить десятку (ожидание 10 секунд):

WinWait, Безымянный - Блокнот, 
IfWinNotActive, Безымянный - Блокнот, , WinActivate, Безымянный - Блокнот, 
WinWaitActive, Безымянный - Блокнот,

4

Re: AHK: Если "событие", то "действие", иначе "закрыть"

Вася Пупкин пишет:

...можно это в твоём скрипте:

ahk_class Notepad

заменить на...

Или куда мне сдесь добавить десятку (ожидание 10 секунд)

SetTitleMatchMode, 2
WinWait, Блокнот,, 10
...
Вася Пупкин пишет:

...я не понимяю что такое ahk_class, и как с ним работать.

Тут погляди.

#Persistent
SetTitleMatchMode, 2
SetTimer, CheckApp, 1000

CheckApp:
   Counter++
   If Counter=10
      ExitApp
   Process, Exist, notepad.exe
   If ErrorLevel
   {
      WinActivate, Блокнот
      Click, 177, 20
      SetTimer, CheckApp, Off
   }
;   TrayTip,, % Counter
   Return

5

Re: AHK: Если "событие", то "действие", иначе "закрыть"

Ладно, пойдёт, спасибо!

6

Re: AHK: Если "событие", то "действие", иначе "закрыть"

Скрипт1:

WinWait, Безымянный - Paint,, 10
If ErrorLevel
   ExitApp
Else
{
Msgbox, Выполнение какой либо функции
}

Скрипт2:

WinWait, Безымянный - Блокнот,, 10
If ErrorLevel
   ExitApp
Else
{
Msgbox, Выполнение какой либо функции
}

Давайте мне ещё немножко поможем.
Кароче сматрите:

Скрипт1:
Если Пейнт открылся
то Выполнение какой либо функции
Иначе Ожидание 10 секунд открытия пейнта, и в слчае неудачи: Закрыть скрипт

Скрипт2:
Если Блокнот открылся
то Выполнение какой либо функции
Иначе Ожидание 10 секунд открытия блокнота, и в слчае неудачи: Закрыть скрипт

Вопрос:
Как мне объединить их в один скрипт?
Щас я их просто запускаю вместе,
а я хотел бы что бы всё это было в одном ahk-файле,
и что бы скрипт работал.

Как вы поняли, наверно, мне нужно выполнить определённую функцию в зависимости от запущенного приложения, и закрыть скрипт, если это приложение не открылось определённое время.

Спасибо.

7

Re: AHK: Если "событие", то "действие", иначе "закрыть"

SetTimer, CheckNotepad, 1000
SetTimer, CheckPaint, 1000
Return
CheckNotepad:
   Counter1++
   If Counter1=10
   {
      MsgBox, 262192,, notepad not found, 1
      SetTimer, CheckNotepad, Off
      Counter1:=
      Gosub, Exit
   }
   Process, Exist, notepad.exe
   If ErrorLevel
   {
      SetTimer, CheckNotepad, Off
      MsgBox, 262208,, notepad found, 1
      WinActivate, ahk_class Notepad
   }
   Return
CheckPaint:
   Counter2++
   If Counter2=10
   {
      MsgBox, 262192,, paint not found, 1
      SetTimer, CheckPaint, Off
      Counter2:=
      Gosub, Exit
   }
   Process, Exist, mspaint.exe
   If ErrorLevel
   {
      SetTimer, CheckPaint, Off
      MsgBox, 262208,, paint found, 1
      WinActivate, ahk_class MSPaintApp
   }
   Return
Exit:
   If (!WinExist("ahk_class Notepad") And !WinExist("ahk_class MSPaintApp"))
   {
      MsgBox, 262160,, notepad & paint is not found
                   . `n      script now exit, 1
      ExitApp
   }
   Else
   {
      If !WinExist("ahk_class Notepad")
      {
         MsgBox, 4,, notepad not found, research?
         IfMsgBox, Yes
            SetTimer, CheckNotepad, 1000
         Else
            ExitApp
      }
      Else If !WinExist("ahk_class MSPaintApp")
      {
         MsgBox, 4,, paint not found, research?
         IfMsgBox, Yes
            SetTimer, CheckPaint, 1000
         Else
            ExitApp
      }
   }
   Return

8

Re: AHK: Если "событие", то "действие", иначе "закрыть"

да, чёта сложновато, лучше я своим способом буду пользоваться (запустить два скрипта)