deadbead
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Доброго времени суток уважаемые форумчане! Взываю о помощи ибо Гуглить больше нету сил....) Уже несколько суток пытаюсь решить с помощью AutoIt две задачи: 1. Послать в неактивное окно нажатие клавиши. 2. Считать цвет точки перекрытого окна. Вся сложность заключается в том, что окно - это окно игры Direct3D. ([CLASS:D3D Window]) Вот что удалось нагуглить.. По первой задаче решение точно есть.. т.к. есть готовое приложение выполняющее это действие без проблем (RFUtilities) но КАК оно это делает я не смог выяснить. По второй задаче нашел способ через WinAPI, но для D3D приложений он не походит ( hBitmap получает только рамку окна, а сама клиентская область белая. Пример показвает цвет точки рабочей области в программе MSPaint с координатой 300х300 в перекрытом \ сдвинутом за границы экрана (не свернутом) окне Код: #Include <WinAPI.au3> #NoTrayIcon AutoItSetOption("TrayIconDebug", 0) AutoItSetOption("MustDeclareVars", 1) AutoItSetOption("WinTitleMatchMode", 4) AutoItSetOption("WinDetectHiddenText", 1) Local $hWnd Local $hDC Local $hMemDC Local $tRect Local $dwWidth Local $dwHeight Local $hBitmap Local $Color Local $intX = 300 Local $intY = 300 $hWnd = WinGetHandle("[CLASS:MSPaintApp]") $hDC = _WinAPI_GetDC($hWnd) $hMemDC = _WinAPI_CreateCompatibleDC($hDC) $tRect = _WinAPI_GetWindowRect($hWnd) $dwWidth = DllStructGetData($tRect, "Right") - DllStructGetData($tRect, "Left") $dwHeight = DllStructGetData($tRect, "Bottom") - DllStructGetData($tRect, "Top") $hBitmap =_WinAPI_CreateCompatibleBitmap($hDC, $dwWidth, $dwHeight) _WinAPI_SelectObject($hMemDC, $hBitmap) DllCall("user32.dll", "int", "PrintWindow", "hwnd", $hWnd, "ptr", $hMemDC, "uint", 0) $Color = DllCall("gdi32.dll", "dword", "GetPixel", "ptr", $hMemDC, "int", $intX, "int", $intY) _WinAPI_DeleteObject($hBitmap) _WinAPI_DeleteDC($hMemDC) _WinAPI_ReleaseDC($hWnd, $hDC) ConsoleWrite("The Color value is 0x" & Hex(BitOR( _ BitShift(BitAND($Color[0], 0x000000FF),-16), _ BitShift(BitAND($Color[0], 0x0000FF00), 0), _ BitShift(BitAND($Color[0], 0x00FF0000), 16)), 6) _ & @CRLF & @CRLF) ConsoleWrite("The Red value is 0x" & Hex(BitShift(BitAND($Color[0], 0x000000FF), 0), 2) & @CRLF) ConsoleWrite("The Green value is 0x" & Hex(BitShift(BitAND($Color[0], 0x0000FF00), 8), 2) & @CRLF) ConsoleWrite("The Blue value is 0x" & Hex(BitShift(BitAND($Color[0], 0x00FF0000), 16), 2) & @CRLF) Exit(0) | Заранее спасибо! Жду ваших комментариев! |