获取屏幕任意一点的颜色
新建一个VB6工程,在Form1上增加一个Timer空间,设置Enabled=True,Interval=100来测试效果.
注意,我的输出在立即窗口中,如果您没有打开立即窗口,可能看不到程序运行的效果,请在IDE中按Ctrl+G打开立即窗口.
代码如下:
Option Explicit
'定义一个POINTAPI
Private Type POINTAPI
x As Long
y As Long
End Type
'定义一个GRB结构
Private Type STRUCTRGB
Red As Integer
Green As Integer
Blue As Integer
End Type
'Windows API 声明
Private Declare Function GetCursorPos Lib \"user32\" (lpPoint As POINTAPI) As Long
Private Declare Function GetDC Lib \"user32\" (ByVal hWnd As Long) As Long
Private Declare Function GetPixel Lib \"gdi32\" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long
Private Sub Timer1_Timer()
On Error Resume Next
Dim myRgb As STRUCTRGB
myRgb = getColor()
Form1.BackColor = RGB(myRgb.Red, myRgb.Green, myRgb.Blue)
Debug.Print myRgb.Red; myRgb.Green; myRgb.Blue
End Sub
'测试颜色函数,给定屏幕任意坐标的x值和y值以及颜色的Long形式值,返回True or False
Private Function ifColor(ByVal x As Long, ByVal y As Long, ByVal color As Long) As Boolean
On Error Resume Next
Dim nTmpColor As Long
nTmpColor = GetPixel(GetDC(0), x, y)
ifColor = (color = nTmpColor)
End Function
'获取屏幕任意一点的颜色,返回GRB结构
Private Function getColor() As STRUCTRGB
On Error Resume Next
Dim tpTemp As POINTAPI
Call GetCursorPos(tpTemp) '获取鼠标位置
Dim myColor As Long
myColor = GetPixel(GetDC(0), tpTemp.x, tpTemp.y) '获取鼠标所在位置颜色的Long值
'分离颜色
getColor.Red = myColor And &HFF
getColor.Green = (myColor And &HFF00&) \\ &H100
getColor.Blue = (myColor And &HFF0000) \\ &H10000
End Function
因篇幅问题不能全部显示,请点此查看更多更全内容