首先你要明白你要取的是那个窗口的点的RGB。 有下面的这三个函数应该就可以了.例子: GetPixel(GetDC(WindowFromPoint(320,100)),320,100) ———————————————————————————————————————————————— WindowFromPoint VB声明 Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long 说明 返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口 返回值 Long,包含了指定点的窗口的句柄。如指定的点处没有窗口存在,则返回零 参数表 参数 类型及说明 xPoint Long,x点值 yPoint Long,y点值 GetDC VB声明 Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long 说明 获取指定窗口的设备场景 返回值 Long,指定窗口的设备场景句柄,出错则为0 参数表 参数 类型及说明 hwnd Long,将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC 注解 若窗口所属类具有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式,则获取的设备场景属窗口或类专有。vb的窗体和图片框控件也是这种情况,它用该函数取得的结果和控件的hdc属性相同(在autoredraw为FALSE时)。您无须考虑取回的窗体或图片框控件设备场景的默认状态,特别是绘图对象。另外,默认状态随着窗体和控件autoredraw属性的设置而不同。在设备场景释放前您必须回复其状态为初始值。对于没有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式的窗口的设备场景,可从通用windows缓存中获取,其状态为默认值。缓存中可用设备场景数量是有限的,因此只要可能就释放设备场景 用本函数获取的设备场景一定要用ReleaseDC函数释放,不能用DeleteDC
GetPixel VB声明 Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long 说明 在指定的设备场景中取得一个像素的RGB值 返回值 Long,指定点的RGB颜色。如指定的点位于设备场景的剪切区之外,则返回CLR_INVALID 参数表 参数 类型及说明 hdc Long,一个设备场景的句柄 x,y Long,逻辑坐标中要检查的点 注解
Option Explicit 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 Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Type POINTAPI x As Long y As Long End Type Dim dc As Long Dim l As LongPrivate Sub Form_Load() dc = GetDC(0) End SubPrivate Sub Form_Unload(Cancel As Integer) ReleaseDC dc, 0 End SubPrivate Sub Timer1_Timer() Dim p As POINTAPI GetCursorPos p l = GetPixel(dc, p.x, p.y) Picture1.BackColor = l If l < 0 Then l = l + 2 ^ 31 End If Dim r As Byte Dim g As Byte Dim b As Byte r = l Mod 256 g = (l \ 256) Mod 256 b = (l \ 65536) Mod 256 Me.Caption = Str(r) & ":" & Str(g) & Str(b) & " -- " & Hex(r) & ":" & Hex(g) & Hex(b) End Sub
有下面的这三个函数应该就可以了.例子:
GetPixel(GetDC(WindowFromPoint(320,100)),320,100)
————————————————————————————————————————————————
WindowFromPoint VB声明
Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
说明
返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口
返回值
Long,包含了指定点的窗口的句柄。如指定的点处没有窗口存在,则返回零
参数表
参数 类型及说明
xPoint Long,x点值
yPoint Long,y点值
GetDC VB声明
Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long
说明
获取指定窗口的设备场景
返回值
Long,指定窗口的设备场景句柄,出错则为0
参数表
参数 类型及说明
hwnd Long,将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC
注解
若窗口所属类具有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式,则获取的设备场景属窗口或类专有。vb的窗体和图片框控件也是这种情况,它用该函数取得的结果和控件的hdc属性相同(在autoredraw为FALSE时)。您无须考虑取回的窗体或图片框控件设备场景的默认状态,特别是绘图对象。另外,默认状态随着窗体和控件autoredraw属性的设置而不同。在设备场景释放前您必须回复其状态为初始值。对于没有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式的窗口的设备场景,可从通用windows缓存中获取,其状态为默认值。缓存中可用设备场景数量是有限的,因此只要可能就释放设备场景
用本函数获取的设备场景一定要用ReleaseDC函数释放,不能用DeleteDC
GetPixel VB声明
Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
说明
在指定的设备场景中取得一个像素的RGB值
返回值
Long,指定点的RGB颜色。如指定的点位于设备场景的剪切区之外,则返回CLR_INVALID
参数表
参数 类型及说明
hdc Long,一个设备场景的句柄
x,y Long,逻辑坐标中要检查的点
注解
GetDC(0)取屏幕的hDC
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 Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Dim dc As Long
Dim l As LongPrivate Sub Form_Load()
dc = GetDC(0)
End SubPrivate Sub Form_Unload(Cancel As Integer)
ReleaseDC dc, 0
End SubPrivate Sub Timer1_Timer()
Dim p As POINTAPI
GetCursorPos p
l = GetPixel(dc, p.x, p.y)
Picture1.BackColor = l
If l < 0 Then
l = l + 2 ^ 31
End If
Dim r As Byte
Dim g As Byte
Dim b As Byte
r = l Mod 256
g = (l \ 256) Mod 256
b = (l \ 65536) Mod 256
Me.Caption = Str(r) & ":" & Str(g) & Str(b) & " -- " & Hex(r) & ":" & Hex(g) & Hex(b)
End Sub