Что нового

[Автоматизация] Работа со "свёрнутой" игрой. Концепция не мешающего бота.

irvin12345

Новичок
Сообщения
30
Репутация
2
У меня скрипты из первого поста периодически выдают FFFFFF цвет.

Причем первый при первом запуске всегда выдает FFFFFF, а если последующие вызовы были достаточно быстро, то может получиться и нужный цвет.
Второй скрипт вразброс в ~30% случаев выдает FFFFFF.

От чего это может зависеть?
(Координаты постоянны, win xp 32 .)
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
Я так понял на своём опыте, что он как-то не так скринит рабочую область и вместо картинки получаешь чёрный фон... А так же я заметил что он выдаёт такие вот бяки когда:
1. Запущен и подсоединён или открыта сессия в TeamViewer
2. Radmin
3. Виртуальная машина

Во всех трёх случаях у меня скрин неактивного(и активного тоже) получался чёрным и скрипт выдавал FFFFFFFFF
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
И всё же, есть у кого-то ответ, почему через РаДмин или ТимВьюер, я не могу считывать неактивные окна??
Результат выдаёт один и тот же либо -1, либо FFFFFF... как быть?
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Но по сути с помощью PrintWindow() вполне возможно же и снять скриншот из свернутого окна или я ошибаюсь?
 

GrafMine

Новичок
Сообщения
7
Репутация
0
После получения конкретного цвета пикселя, и он мне подходит, как кликнуть в определенное место (x,y) неактивного окна?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
ControlClick ( "title", "text", controlID [, button [, clicks [, x [, y]]]] )

не подходит?
 

GrafMine

Новичок
Сообщения
7
Репутация
0
Код:
ControlClick($hWnd,"","","left",1,186,485)
ноль реакции, в чем может быть проблема ?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Если эта команда сработает на том же неактивном нотпаде, значит проблема в защите игры
 

las6

Новичок
Сообщения
9
Репутация
0
Re: [Автоматизация] Работа со "свёрнутой" игрой. Концепция не мешающего бота

Belfigor [?]
Если эта команда сработает на том же неактивном нотпаде

попробовал кликнуть в пеинте
Код:
ControlClick("Безымянный - Paint","","","left",1,800,400)

кликает, если только окно активно
когда окно свернуто, или развернуто, но неактивно, то ни чего не происходит :(
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Re: [Автоматизация] Работа со "свёрнутой" игрой. Концепция не мешающего бота

Прекрасно кликает в свёрнутое окно
:shooting1:
Код:
ControlClick("Безымянный - Paint","","[Class:Afx:00007FF756F20000:8; Instance:1]","left",1,600,200)
 

las6

Новичок
Сообщения
9
Репутация
0
Re: [Автоматизация] Работа со "свёрнутой" игрой. Концепция не мешающего бота

C2H5OH [?]
Прекрасно кликает в свёрнутое окно
Я думал, что controlID необязательно писать)
Получилось в пеинте :smile:
Получилось в активном браузере
Получилось в неактивном браузере (но почему то браузер становится активным при каждом вызове функции)
В свернутом браузере вообще не получилось(
Код:
ControlClick($zag,"","[CLASS:Chrome_RenderWidgetHostHWND; INSTANCE:1]","left",3,400,400)


как быть?


Добавлено:
Сообщение автоматически объединено:

В опере все получилось так как надо, в гугл хроме все равно никак(
 
Сообщения
137
Репутация
-2
Re: [Автоматизация] Работа со "свёрнутой" игрой. Концепция не мешающего бота

Да, в Paint работает прекрасно, а в Yandex никак
 

fotografh

Новичок
Сообщения
7
Репутация
0
Re: [Автоматизация] Работа со "свёрнутой" игрой. Концепция не мешающего бота

Я плохо разбираюсь в программировании, потому надеюсь кто объяснит. Я не совсем понял второй код с AdlibRegister("_BitmapWin", 500). В чём данное преимущество?

1. В данном случае функция сперва удаляет, потом заного создаёт. В конце у нас остаётся незакрытый "хвост". Не проблема, в конце можно дописать закрытие.
2. Постоянно происходит обновление функции, причем в своём собственном темпе.

Как я понимаю весь процесс в игре делится на моменты когда нам нужно контролировать экран и когда вовсе не обязательно. Разве не лучше сделать 3 функции.

Код:
func open()
$iWidth = _WinAPI_GetWindowWidth($hWnd)
$iHeight = _WinAPI_GetWindowHeight($hWnd)
$hDDC = _WinAPI_GetDC($hWnd)
$hCDC = _WinAPI_CreateCompatibleDC($hDDC)
$hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iWidth, $iHeight)
_WinAPI_SelectObject($hCDC, $hBMP)
DllCall("User32.dll", "int", "PrintWindow", "hwnd", $hWnd, "hwnd", $hCDC, "int", 0)
EndFunc

func update()
DllCall("User32.dll", "int", "PrintWindow", "hwnd", $hWnd, "hwnd", $hCDC, "int", 0)
EndFunc

func close()
_WinAPI_ReleaseDC($hWnd, $hDDC)
_WinAPI_DeleteDC($hCDC)
_WinAPI_DeleteObject($hBMP)
EndFunc


И вызывать их тогда когда нам это необходимо? Например, нам нужно проверить количество ресов и для этого нам нужен снимок экрана, после чего идут клики, где:
1. Контроль нужен - делаем обновления по мере необходимости
2. Не нужен - вызвали функцию закрытия

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