Определение цвета, зная hWnd

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GorYU
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 20.07.2005 (Ср) 17:03

Определение цвета, зная hWnd

Сообщение GorYU » 01.08.2005 (Пн) 11:36

Как определить цвет определённой точки в окне с известным hWnd
Сделал через PrtScr, но это не нормально.

JohnCR
Обычный пользователь
Обычный пользователь
 
Сообщения: 75
Зарегистрирован: 14.06.2005 (Вт) 19:03

Сообщение JohnCR » 01.08.2005 (Пн) 11:44

Можно так:
Код: Выделить всё
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Command1_Click()
    a = GetPixel(GetDC(Me.hwnd), 100, 100) 'rgb
    MsgBox (a)
End Sub

maxV
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 12.07.2004 (Пн) 18:26

Сообщение maxV » 01.08.2005 (Пн) 18:33

Маленько добавлю, с вашего разрешения...
Код: Выделить всё
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

Private Sub Command1_Click()
    a = GetPixel(GetDC(Me.hwnd), 100, 100) 'rgb
    Debug.Print "RED="; RedFromRGB(a); "GREEN="; GreenFromRGB(a); "BLUE="; BlueFromRGB(a)
End Sub


' Paste these functions into the Declarations section
' of the Form or Code Module.
Private Function RedFromRGB(ByVal rgb As Long) _
   As Integer
   ' The ampersand after &HFF coerces the number as a
   ' long, preventing Visual Basic from evaluating the
   ' number as a negative value. The logical And is
   ' used to return bit values.
   RedFromRGB = &HFF& And rgb
End Function

Private Function GreenFromRGB(ByVal rgb As Long) _
   As Integer
   ' The result of the And operation is divided by
   ' 256, to return the value of the middle bytes.
   ' Note the use of the Integer divisor.
   GreenFromRGB = (&HFF00& And rgb) \ 256
End Function

Private Function BlueFromRGB(ByVal rgb As Long) _
   As Integer
   ' This function works like the GreenFromRGB above,
   ' except you don't need the ampersand. The
   ' number is already a long. The result divided by
   ' 65536 to obtain the highest bytes.
   BlueFromRGB = (&HFF0000 And rgb) \ 65536
End Function


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 35

    TopList