Nefakt
Новичок
- Сообщения
- 74
- Репутация
- 3
Всем привет.
Нужна помощь, взял данный код
Работает он правильно, в консоль выводит нужные координаты.
Но если прикрутить нажатие мыши
В консоль выводит те же координаты но мышь нажимает совсем в другом месте.
Помогите решить, заранее спасибо и с наступающим вас.
Нужна помощь, взял данный код
Код:
#Include <Constants.au3>
#Include <WinAPIEx.au3>
#Include <WindowsConstants.au3>
Run(@ProgramFilesDir & '\Microsoft Games\Minesweeper\MineSweeper.exe')
$hWnd = WinWait('Minesweeper', '', 3)
If Not $hWnd Then
Exit
EndIf
; Чтобы мины успели нарисоваться!
Sleep(1000)
$Size = WinGetClientSize($hWnd)
$hDC = _WinAPI_GetDC($hWnd)
$hMemDC = _WinAPI_CreateCompatibleDC($hDC)
$hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $Size[0], $Size[1])
$hSv = _WinAPI_SelectObject($hMemDC, $hBitmap)
_WinAPI_BitBlt($hMemDC, 0, 0, $Size[0], $Size[1], $hDC, 0, 0, $SRCCOPY)
_WinAPI_SelectObject($hMemDC, $hSv)
_WinAPI_DeleteDC($hMemDC)
_WinAPI_ReleaseDC($hWnd, $hDC)
; Здесь у тебя есть готовый битмап ($hBitmap), делай с ним что хочешь!
;----------------------------------------
; Демонстрация
$hWnd = GUICreate('', $Size[0], $Size[1], 50, 50, -1, $WS_EX_TOPMOST)
GUISetState()
$hDC = _WinAPI_GetDC($hWnd)
$L = $Size[0] * $Size[1]
$tBits = DllStructCreate('dword[' & $L & ']')
_WinAPI_GetBitmapBits($hBitmap, 4 * $L, DllStructGetPtr($tBits))
$Offset = 1
For $y = 0 To $Size[1] - 1
For $x = 0 To $Size[0] - 1
_WinAPI_SetPixel($hDC, $x, $y, DllStructGetData($tBits, 1, $Offset))
$Offset += 1
Next
Next
_WinAPI_ReleaseDC($hWnd, $hDC)
;----------------------------------------
; Ищем точку с цветом 0x87BEF5 (RGB)
$ARGB = _WinAPI_IntToDWord(BitOR(0x87BEF5, 0xFF000000))
$L = $Size[0] * $Size[1]
$tBits = DllStructCreate('dword[' & $L & ']')
_WinAPI_GetBitmapBits($hBitmap, 4 * $L, DllStructGetPtr($tBits))
$Timer = TimerInit()
$Offset = -1
For $i = 1 To $L
If DllStructGetData($tBits, 1, $i) = $ARGB Then
$Offset = $i
ExitLoop
EndIf
Next
ConsoleWrite('API' & @CR)
ConsoleWrite(TimerDiff($Timer) & @CR)
If $Offset = -1 Then
ConsoleWrite('Not Found!' & @CR)
Else
ConsoleWrite('X = ' & Mod($Offset, $Size[0]) - 1 & @CR)
ConsoleWrite('Y = ' & Ceiling($Offset / $Size[0]) - 1 & @CR)
$X = Mod($Offset, $Size[0]) - 1
$Y = Ceiling($Offset / $Size[0]) - 1
MouseClick("left", $X, $Y)
EndIf
ConsoleWrite('' & @CR)
;----------------------------------------
Opt('MouseCoordMode', 2)
Opt('PixelCoordMode', 2)
$Timer = TimerInit()
$Offset = False
For $y = 0 To $Size[1] - 1
For $x = 0 To $Size[0] - 1
If PixelGetColor($x, $y, $hWnd) = 0x87BEF5 Then
$Offset = True
ExitLoop 2
EndIf
Next
Next
ConsoleWrite('AutoIt' & @CR)
ConsoleWrite(TimerDiff($Timer) & @CR)
If Not $Offset Then
ConsoleWrite('Not Found!' & @CR)
Else
ConsoleWrite('X = ' & $x & @CR)
ConsoleWrite('Y = ' & $y & @CR)
EndIf
;----------------------------------------
Do
Until GUIGetMsg() = -3
Работает он правильно, в консоль выводит нужные координаты.
Но если прикрутить нажатие мыши
Код:
ConsoleWrite('X = ' & Mod($Offset, $Size[0]) - 1 & @CR)
ConsoleWrite('Y = ' & Ceiling($Offset / $Size[0]) - 1 & @CR)
$X = Mod($Offset, $Size[0]) - 1
$Y = Ceiling($Offset / $Size[0]) - 1
MouseClick("left", $X, $Y)
В консоль выводит те же координаты но мышь нажимает совсем в другом месте.
Помогите решить, заранее спасибо и с наступающим вас.