Что нового

[Last chaos] проблемы с кликом по координатам фонового окна

wyt25rus

Новичок
Сообщения
12
Репутация
0
проект называется last chaos, офф сайт lc.mail.ru. так вот решил написать скрипт эмитирующий действия человека, так называемый бот.
суть бота в следующем надо эмитировать кликанье мыши в определенных координатах, этого фонового окна(окошко свернуто), начало отсчета координат предпочтительней сделать относительно этого окна, причем кликать так, что бы мыкшкой можно было пользоваться в другом окне этой же игры, от сюда еще одна проблема, как привязать скрипт к конкретному окну(окон запущитых+свернутых будет около 4)
если изложил не понятно, могу дать пояснения) прошу помощи и узнающих)
Код:
WinWaitActive('Last Chaos - Mail.ru (Window 800x600)', '', 3)
$hWnd1 = WinGetHandle('Last Chaos - Mail.ru (Window 800x600)')
Sleep(2000)
While 1 = 1

MouseClick("left", 60, 337, 2)
MouseClick("left", 412, 339, 2)
MouseClick("left", 752, 514, 2)
MouseClick("left", 204, 338, 2)

Sleep(1000)
Wend


ЗЫ у меня получился вот такой скрипт, но он почему то работал не с окном, а скорее с моим рабочим столом... что бы его остановить пришлось перезапускать комп
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Используй ControlClick, он позволит тебе отправлять клики в конкретное окно.
 
Автор
W

wyt25rus

Новичок
Сообщения
12
Репутация
0
а можете на конкретном примере показать, в примерах как то тяжело разоброться
Код:
; Запуск калькулятора
Run('calc.exe')
If WinWaitActive('[CLASS:SciCalc]', '', 5) Then ; ожидание появления калькулятора 5 сек
    ; 4 раза кликаем основной ("main") кнопкой мыши
    ControlClick('[CLASS:SciCalc]', '', '[CLASS:Button; INSTANCE:15]', "main", 4) ; 15 - кнопка 3 в обычном виде
    ControlClick('[CLASS:SciCalc]', '', '[CLASS:Button; INSTANCE:54]', "main", 4) ; 54 - кнопка 3 в инженерном виде
Else
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
EndIf

вот пример, но тут не стоят координаты, а он сам как то находит эти кнопки о_0
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
ControlClick('[CLASS:SciCalc]', '', '', "main", 1,200,300)
 
Автор
W

wyt25rus

Новичок
Сообщения
12
Репутация
0
попробовал, но почему то ничего не происходит=(
Код:
WinGetHandle("[CLASS:Nksp]")
Sleep(2000)
While 1 = 1
ControlClick('[CLASS:Nksp]', '', '', "left", 2,60, 337)
ControlClick('[CLASS:Nksp]', '', '', "left", 2,412, 339)
ControlClick('[CLASS:Nksp]', '', '', "left", 2,752, 514)
ControlClick('[CLASS:Nksp]', '', '', "left", 2,204, 338)
Sleep(1000)
Wend

выглядит оно примерно вот так, но вопрос, как привязать к определенному окну, так что бы работало как при активном так и при фоновом режиме? у них название одинаковые но Handle разные, что это не знаю, но видимо это разовый "порядковый" номер)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Для начала выясни стаит ли какой-нибудь GameGuard на той игре. Многие GG запрещают что-либо делать с неактивным окном. А еще большее их количество и с активным.
 
Автор
W

wyt25rus

Новичок
Сообщения
12
Репутация
0
я купил бота по этой игре, написан он в автоите, он работает с фоновыми окнами, это проверенно, мне нужно небольшое дополнение... бот который я купил, основной, и выполняет основные функции, но появилась потребность в небольшом дополнении, попросил автора бота написать приложение небольшое, он отказался, ссылаясь на занятость))) хотя там все предельно просто(как мне кажется) в UoPilote написал, но пилот не способен работать с определенными процессами игры, а автоит способен, вот пытаюсь его постигнуть с Вашей помощью)
 

jakobi

Новичок
Сообщения
5
Репутация
0
Кстати на счет GG, я заметил что окно с игрой не воспринимает нажатия клавиш посланные в него, как в активном, так и в неактивном окне. Игра к тому же требует запуска от имени администратора. Раньше такого не было, например год назад.
Может я не правильно посылаю нажатия?
Код:
ControlSend($hWnd1, "","", "{TAB}")
 
Автор
W

wyt25rus

Новичок
Сообщения
12
Репутация
0
jakobi, думаю у тебя где то ошибка, потому что бот который я приобрел работает как при активном так и при фоновом режиме, так же простейший кликер UoPilot так же как кликер работает замечательно с окном как фоновым так и активном, НО работа с цветами в пилоте возможна только при активности окна, а это огромный минус... кстати эта еще одна из причин моего перехода на avtoit
 

winstan

Эксплотатор)
Сообщения
406
Репутация
79
а можно скрин бота? а то у меня подозрения что мое чудо продают :laugh:
 

Seresal

Новичок
Сообщения
8
Репутация
0
Самое простое для закрепления "макроса" за конкретным окном - это закрепить его за названием окна. В случае с LastCaos - название окна зависит от разрешения этого окна и выглядит примерно так "Last Chaos - Mail.ru (Window 800x600)". То есть нужно нужное нам окно сделать отличным по разрешению от других окон, а после закрепить за ним бота.
Выглядеть это будет примерно так:
Код:
#Include <WinAPI.au3>
$h1stWin = WinGetHandle("Last Chaos - Mail.ru (Window 800x600)")
ControlClick($h1stWin, "", "", "left", 1, 45, 54)
_SendMessage($hWnd, 0x6, 0x1)

Если нельзя менять разрешение и оно совпадает с другими запущенными окнами, то можно использовать хэндл нужного нам окна.
Код:
#Include <WinAPI.au3>
Global $h1stWin = "" 
HotKeySet ( "{numpad9}", "_GetWinHandle1");Включает определение хэндла окна
HotKeySet ("{numpad7}","_1") ;Включает бота

Func _GetWinHandle1 () 
    $aAllWindows = WinList ()
    For $i = 1 to $aAllWindows[0][0]
        If _IsActive($aAllWindows[$i][1]) Then 
            $h1stWin = $aAllWindows[$i][1] 
            TrayTip ( "Проверь Окно", "", "", 3)
        EndIf
    Next
EndFunc

While 1
Sleep (1000)
WEnd

Func _IsActive($handle)
  If BitAnd( WinGetState($handle), 8 ) Then 
    Return 1
  Else
    Return 0
  EndIf
EndFunc

Func _1()
While 1
ControlSend($h1stWin, "", "", "{f1}");это пример, сюда вставляем тело бота
_SendMessage($h1stWin, 0x6, 0x1) 
WEnd
EndFunc
Немного о скрипте выше. Нужно запустить бот, зайти в окно с игрой, и нажать с клавиатуры нумпадовскую 9. Скрипт определит хэндл окна в котором вы нажали кнопку. Что бы включить бота нужно нажать нумпадовскую 7.

По поводу выключения скрипта, советую вставлять функцию паузы и выключения макроса по горячей кнопке, или выставлять паузу (по крайней мере для теста скрипта).
 
Верх