1 (изменено: inuke, 2011-06-30 21:28:59)

Тема: AHK: Работа с не активным окном

Добрый день. Есть скрипт, который замечательно работает, НО

#Persistent
   SetTimer, Timer1, 10000
   SetTimer, Timer2, 600000
   Return

Timer1:
Send {F5}
   Return
   
Timer2:
MouseClick, Left, 242, 300,,0
sleep 500
MouseClick, Left, 763, 411,,0
   Return

Возможно ли сделать чтобы  данные действия выполнялись только в фоновом окне? Т.е. вариант с WinShow не подходит, т.к. раз в 10 секунд будет распахиваться второе окно и станет практически не возможна нормальная работа в активном.

Плюс, в идеале, если будет запущено несколько приложений с одинаковым названием(например окон браузера), скрипт выполнялся бы только в том которое запущено первым.

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

2

Re: AHK: Работа с не активным окном

Почитайте:
http://www.script-coding.com/AutoHotkey … hMode.html
http://www.script-coding.com/AutoHotkey … ndRaw.html

3

Re: AHK: Работа с не активным окном

Спасибо. Частично получилось и работает:)

#Persistent
   SetTimer, Timer1, 10000
   Return

Timer1:
SetTitleMatchMode, 2
ControlSend, , Send {F5}, Имя окна

   Return

Если с нажатием клавиши теперь более или менее понятно, то что делать со вторым циклом. Т.е. позиционированием курсора и нажатием ЛКМ? Вроде для этой цели ControlSend ни как не использовать

Вот попытался усложнить, но... Теперь перестало работать. Где у меня ошибка?

F1::
WinGet, my_id
return


#Persistent
   SetTimer, Timer1, 10000
   SetTimer, Timer2, 600000
   Return

Timer1:
ControlSend, , {F5}, ahk_pid %my_id%
   Return

Timer2:
ControlClick, X242 Y300, ahk_pid %my_id%, ,left
sleep, 500
ControlClick, X763 Y411, ahk_pid %my_id%, ,left
   Return

4

Re: AHK: Работа с не активным окном

Во-первых, замечу, что в приведённом коде нет никаких циклов.
Во-вторых, команда Return прерывает секцию автовыполнения. Следовательно, подпрограммы Timer1 и Timer2 не будут запущены.
P. S. Ознакомьтесь на всякий случай с CoordMode.

5 (изменено: inuke, 2011-07-02 08:23:11)

Re: AHK: Работа с не активным окном

Перепробовал много чего, но...  Выполняется только на половину. Ф5 нажимается, а вот мышка не кликает( Не могу понять что не так(((

F1::
WinGet, my_id, pid, A


#Persistent
   SetTimer, Timer1, 10000
   SetTimer, Timer2, 600000
   Return

Timer1:
ControlSend, , {F5}, ahk_pid %my_id%
   Return

Timer2:
CoordMode, Mouse, Pixel 
ControlClick, X242 Y300, ahk_pid %my_id%, ,left
sleep, 500
ControlClick, X763 Y411, ahk_pid %my_id%, ,left
   Return

Прошу прощения за возможно глупые вопросы, но я не программист и это первое что я пишу. Очень прошу, помогите дописать этот скрипт.

6

Re: AHK: Работа с не активным окном

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

7 (изменено: inuke, 2011-07-02 12:02:23)

Re: AHK: Работа с не активным окном

Я не знаю как сделать иначе. Исходя из найденных на этом форуме примеров, мне казалось, что это правильно.

Мне нужно чтобы в не активном окне раз в 10 секунд нажималась клавиша Ф5, а раз в 10 минут происходило 2 нажатия в нужных координатах ЛКМ. Т.к. окон с одинаковыми названиями может быть несколько, поэтому мы изначально выбираем нужное окно нажатием Ф1, тем самым определяя его id и дальше работаем именно с этим id. Вроде так)

Ещё раз повторюсь, я не программист и основывался исключительно на логике после прочтения прочих тем на форуме.

П.С. на сколько я могу судить из соседних тем, не у одно меня это вызывает проблему и не получается. Неужели нету способа нажать ЛКМ в нужных координатах в не активном окне?

8 (изменено: ilya20069, 2011-07-02 13:33:37)

Re: AHK: Работа с не активным окном

Можно так. F1 запускает таймеры и читает PID.

CoordMode, Mouse, Pixel 
return

F1::
WinGet, my_id, pid, A
SetTimer, Timer1, 10000
SetTimer, Timer2, 600000
Return

Timer1:
ControlSend, , {F5}, ahk_pid %my_id%
Return

Timer2:
ControlClick, X200 Y300, ahk_pid %my_id%, ,left
sleep, 500
ControlClick, X200 Y300, ahk_pid %my_id%, ,left
Return

F12::ExitApp

9

Re: AHK: Работа с не активным окном

Илья, спасибо за участие, но...
хех... Ф5 нажимается, а с кликами - беда((( Нажатия ЛКМ происходят только когда активно это окно и только в то место где находится курсор(((

Неужели нет выхода?

10 (изменено: ilya20069, 2011-07-02 19:01:24)

Re: AHK: Работа с не активным окном

Хмм... у меня все работает как положено, а окно случайно не 3D?

11

Re: AHK: Работа с не активным окном

Случайно... ММОRPGшка одна. Просто когда окно активно обычный MouseClick(например MouseClick, Left, 242, 300,,0) работает замечательно. Вся проблема именно заставить работать на не активном окне(((

Может быть попробовать это как-то сделать через PostMessage? Попробовал разобраться, но это выше моих сил(((

Вот нашёл пару тем на офф. форуме:
Alternative to ControlClick
ControlClick, Double Click Help

Но как это собрать и заставить работать....ппц короче((

12

Re: AHK: Работа с не активным окном

inuke, вы разобрались? Напишите решение пожалуйста.

13

Re: AHK: Работа с не активным окном

В неактивное окно приложений, использующих D3D, точно по координатам не кликнешь, по крайней мере стандартными способами, описанными в хелпе. Проверено. (Я не голословен, можете ознакомиться с предыдущими темами).

14 (изменено: kflirik, 2011-07-09 03:10:01)

Re: AHK: Работа с не активным окном

Я это уже понял, потратив день на попытки заставить работать ))
Хотя для дублирование клика в несколько окон можно сделать так:

; *** Mouse click ***
ClonesClick() {
        Global winid1, winid2
        MouseGetPos, x, y               ; координаты в активном окне
        WinGetPos,,, Aw, Ah, A          ; размеры активного окна

                WinActivate, ahk_id %winid1%
                WinGetPos,,, w1, h1, ahk_id %winid1% ;размеры окна назначения
                x := x/(Aw/w1)                   ; Координаты в окне назначения
                y := y/(Ah/h1)
                MouseClick, , %x%,%y%,,0

                sleep 500

                WinActivate, ahk_id %winid2%
                WinGetPos,,, w1, h1, ahk_id %winid2% ;размеры окна назначения
                x := x/(Aw/w2)                   ; Координаты в окне назначения
                y := y/(Ah/h2)
                MouseClick, , %x%,%y%,,0
}
~Lbutton:: ClonesClick()