1

Тема: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

Ребята, помогите. Я в АХК 0! Мне нужен скриптик, который будет делать следующее:
1. Клик ентер в активном окне
2. Переход к следующему окну путем нажатия alt+tab
3. Клик ентер
4. Переход к следующему окну путем нажатия alt+tab
5. Клик ентер

И так несколько раз. Главное - чтобы все делалось очень быстро, а количество кликов можно было выбрать вручную.

Спасибо огромное за помощь!

2

Re: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

Команда Send тебе в помощь!

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

3

Re: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

teadrinker пишет:

Команда Send тебе в помощь!

Спасибо. Немного разобрался. Теперь хотелось бы сделать с этого небольшую программку с полем для ввода количества повтора данного скрипта и кнопкой "Старт".

Знаю, что надо для этого использовать Smart GUI Creator, но негде не могу найти подробный мануал. Если не сложно, скажите, пожалуйста, что надо дописать до скрипта, чтобы сделать то, о чем я написал выше.

Собственно, сам скрипт:

send {Enter}
send !{Tab}

Спасибо!

4 (изменено: TIGRUS, 2011-06-18 16:52:31)

Re: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

ps. Как зациклить данный скрипт? Т.е. сделать так, чтобы он повторялся заданное количество раз?
И как заставить программу ждать, пока окно активируется?

5 (изменено: Grey, 2011-06-20 02:16:27)

Re: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

TIGRUS пишет:

Знаю, что надо для этого использовать Smart GUI Creator...

Очень удобный иструмент.

loopcount := 5
myhotkey = F5
Gosub,Read
Gosub,TrayMenu
Gosub,Settings
Return

Read:
   If myhotkey Not In F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12
   ,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
   ,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я
   ,1,2,3,4,5,6,7,8,9,0,-,=,*,/,\,[,]
      {
         myhotkey = F5
         Gosub, Settings
      }
   If myhotkey =
      {
         myhotkey = F5
         Gosub, Settings
      }
   If loopcount =
      {
         loopcount := 5
         Gosub, Settings
      }
   hotkeydown = *%myhotkey%
   Hotkey, %hotkeydown%, HotkeyLabel, On
   Return

HotkeyLabel:
   Loop, % loopcount
      {
         Send {Enter}
         Sleep, 50 ; время подбираете по вкусу
         Send !{Tab}
      }
   KeyWait, % myhotkey
   Return

SettingsOK:
   Gui, Submit
   Gosub, Read
   Return

Settings:
   Hotkey, %hotkeydown%, HotkeyLabel, Off
   Gui, Destroy
   Gui, Font, Courier New
   Gui, Add, Edit, vmyhotkey x12 y10 w20 h20 , % myhotkey
   Gui, Add, Edit, vloopcount x12 y40 w20 h20 , % loopcount
   Gui, Add, Button, gSettingsCancel x72 y70 w50 h20 , &Cancel
   Gui, Add, Text, x42 y10 w100 h20 , назначаем хоткей
   Gui, Add, Text, x42 y40 w140 h20 , задаем число повторений
   Gui, Add, Button, gSettingsOK x12 y70 w50 h20 , &OK
   Gui, Add, Button, gExit x132 y70 w50 h20 , &Exit
   Gui, Show, xCenter yCenter h106 w187, Settings
   Return

TrayMenu:
   Menu, Tray, NoStandard
   Menu, Tray, Add, &Settings, Settings
   Menu, Tray, Add, &Exit, Exit
   Return

SettingsCancel:
   Gui, Destroy
   Hotkey, %hotkeydown%, HotkeyLabel, On
GuiClose: ; закрыть на крестик не получится, надо делать выбор : ok, cancel или exit :)
   Return

Exit:
   Gui, Destroy
   ExitApp

Если выбран не корректный хоткей в поле ввода, или в случае если поля ввода пустые, происходит сброс на дефолт.

TIGRUS пишет:

Как зациклить данный скрипт?

Loop (normal)

TIGRUS пишет:

И как заставить программу ждать, пока окно активируется?

WinWaitActive.

6 (изменено: alexii, 2011-06-22 09:51:12)

Re: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

Огромное спасибо! Возник еще один вопрос.

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

7

Re: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

TIGRUS, избегайте излишнего цитирования.

8

Re: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

2 TIGRUS Не понятно, поясните точнее.

9

Re: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

Grey пишет:

2 TIGRUS Не понятно, поясните точнее.

Сейчас скрипт делает это определенное количество раз без ожидания активации окна.

send {Enter}
Sleep, 50
send !{Tab}

Нужно сделать так, чтобы скрипт исполнил это

send {Enter}
Sleep, 50
send !{Tab}

и подождал, пока активируется следующее окно. После каждого цикла окно меняется и соответственно меняется его название. Как заставить скрипт ждать активации окна? (все окна одной программы, так сказать. их процессы в диспетчера задач разные, но имеют одинаковые название - mstsc ) Или как узнать универсальное имя для этих окон? В общем, нужно сделать так:

send {Enter}
Sleep, 50
send !{Tab}
WinWaitActive, Название окна, 0

Спасибо!

10

Re: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

В момент симуляции первого нажатия Enter'а дочернее окно закрывается, а родительское (основное окно программы) остаётся активным, или Enter закрывает основное окно, через какой-то период времени появляется окно от этой же программы, где следует сделать вторую симуляцию нажатия Enter'а?

11

Re: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

Нет, ентер ничего не закрывает. Он просто дает старт некоторым действиям в окне, а альт+таб переключает окно на другое. Нужно сделать так, чтобы после команды "альт+таб" " скрипт подождал активации следующего окна. Все окна имеют разные названия и разные процессы в диспетчере задач, но эти процессы называются одинаково.

12 (изменено: Grey, 2011-06-24 11:53:45)

Re: AHK: Переход от одного окна к другому и нажатие кнопки в каждом окне

s := VarSetCapacity(a, 4096)
loopcount := 5
myhotkey := "F"5
Gosub,Read
Gosub,TrayMenu
Gosub,Settings
Return

Read:
   If myhotkey Not In F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12
   ,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
   ,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я
   ,1,2,3,4,5,6,7,8,9,0,-,=,*,/,\,[,]
      {
         myhotkey := "F"5
         Gosub, Settings
      }
   If myhotkey =
      {
         myhotkey := "F"5
         Gosub, Settings
      }
   If (loopcount = "0" || loopcount = "")
      {
         loopcount := 5
         Gosub, Settings
      }
   hotkeydown = *%myhotkey%
   Hotkey, %hotkeydown%, HotkeyLabel, On
   Return

HotkeyLabel:
   Loop, % loopcount
      { ; собственно это переработанный 4тый пример из описания по комманде Process
         DllCall("Psapi.dll\EnumProcesses"
                , "UInt", &a
                   , "UInt", s
                      , "UIntP", r)
         Loop, % r // 4
            {
               id := NumGet(a, A_Index * 4)
               h := DllCall("OpenProcess"
                           , "UInt", 0x0010 | 0x0400
                              , "Int", false
                                 , "UInt", id)
               VarSetCapacity(n, 4096, 0)
               e := DllCall("Psapi.dll\GetModuleBaseNameA"
                           , "UInt", h
                              , "UInt", 0
                                 , "Str", n
                                    , "UInt", s)
               DllCall("CloseHandle", "UInt", h)
               If (n && e && n = "mstsc.exe")
                  {
;                     WinActivate, % "ahk_pid" id ; вариант 1 - активация всех найденых окон
                     WinWaitActive, % "ahk_pid" id ; вариант 2 - ожидание активации найденых окон
                     Send, {Enter}
                  }
            }
      }
   KeyWait, % myhotkey
   Return
 
SettingsOK:
   Gui, Submit
   Gosub, Read
   Return
 
Settings:
   Hotkey, %hotkeydown%, HotkeyLabel, Off
   Gui, Destroy
   Gui, Font, Courier New
   Gui, Add, Edit, vmyhotkey x12 y10 w20 h20 , % myhotkey
   Gui, Add, Edit, vloopcount x12 y40 w20 h20 , % loopcount
   Gui, Add, Button, gSettingsCancel x72 y70 w50 h20 , &Cancel
   Gui, Add, Text, x42 y10 w100 h20 , choose desired key
   Gui, Add, Text, x42 y40 w140 h20 , select count of loops
   Gui, Add, Button, gSettingsOK x12 y70 w50 h20 , &OK
   Gui, Add, Button, gExit x132 y70 w50 h20 , &Exit
   Gui, Show, Center h106 w187, Settings
   Return
 
TrayMenu:
   Menu, Tray, NoStandard
   Menu, Tray, Add, &Settings, Settings
   Menu, Tray, Add, &About, About
   Menu, Tray, Add, &Exit, Exit
   Return
 
SettingsCancel:
   Gui, Destroy
   Hotkey, %hotkeydown%, HotkeyLabel, On
GuiClose: ; закрыть на крестик не получится, надо делать выбор: ок, отмена или выход :)
   Return

About:
   Gui, 99:Font, CBlue Underline
   Gui, 99:Add, Text, y+5 gGoAutoHotKey, www.autohotkey.com
   Gui, 99:Font
   Gui, 99:+AlwaysOnTop
   Gui, 99:Show, Center
   Return

GoAutoHotKey:
   Run, http://www.autohotkey.com,, UseErrorLevel
   Return

Exit:
   Gui, Destroy
   ExitApp