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. Не нужен - вызвали функцию закрытия
Я понимаю, что в данном случае мы ушли от постоянно вызова длл и можем циклить проверку пикселей, но при этом мы зачем-то опираемся на интервал обновления вместо ручного вызова и получаем задержку в длину этого интервала. Или это итак как бы подразумевается, что вот рабочий код, а дальше крутите в своих целях. Поскольку я в этом плохо разбираюсь, то, возможно, я упускаю что-то важное, потому и хотел спросить.