Что нового

API GetPixel не работает с hwnd

Rivald

Новичок
Сообщения
61
Репутация
1
Если поставить в параметр hwnd 0, то все работает, цвет возвращает, а если поставить hwnd какого-либо окна, всегда возвращает черный цвет.
Код:
$hwnd = WinGetHandle("***", '')
$open = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hwnd)
$call = DllCall("Gdi32.dll", "ptr", "GetPixel", "HANDLE", $open[0], "int", 508, "int", 606)
$error = DllCall("Kernel32.dll", "DWORD", "GetLastError")
MsgBox(0, '', $error[0] & @CRLF & $open[0] & @CRLF & @CRLF & 'Цвет: ' & $call[0])
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Посмотрите в WinAPIEx.au3 реализацию функции
Код:
_WinAPI_GetPixel()

Там "dword", а не "ptr".
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
#Include <WinAPIEx.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 623, 449, 192, 114)
GUISetBkColor(0x00FFFF)
GUISetState(@SW_SHOW)

$hWnd = WinGetHandle("Form1", '')
$hDC = _WinAPI_GetDC($hWnd)
If Not $hDC Then
	ConsoleWrite('-->ERROR ('& _WinAPI_GetLastError() & ') from function _WinAPI_GetDC: '& $hDC)
	Exit
EndIf

$i_Color = _WinAPI_GetPixel($hDC, 10, 10)
If @error Then
	ConsoleWrite('-->ERROR ('& _WinAPI_GetLastError() & ') from function _WinAPI_GetPixel: '& $i_Color)
	Exit
EndIf

ConsoleWrite('Color: '& $i_Color & @CR)
Sleep(3000)
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Rivald [?]
При чём тут hwnd? Замените "ptr" на "dword" и работайте с любым окном.
Код:
$hwnd = WinGetHandle("Калькулятор", '')
$open = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hwnd)
$call = DllCall("Gdi32.dll", "dword", "GetPixel", "HANDLE", $open[0], "int", 100, "int", 100)
$error = DllCall("Kernel32.dll", "DWORD", "GetLastError")
MsgBox(0, '', $error[0] & @CRLF & $open[0] & @CRLF & @CRLF & 'Цвет: ' & $call[0])
 
Верх