萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 1609|回复: 2

获取屏幕上某点的颜色(API实现)

[复制链接]
发表于 2004-7-8 18:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
获取屏幕上某点的颜色(API实现)


VB的Point函数可以获取程序窗体上任意像素点的颜色,但无法获得窗口之外的颜色,通过调用API函数,便可完成该任务,示例代码如下:

Option Explicit

'设备场景模式常数
Private Const CCHDEVICENAME As Long = 32
Private Const CCHFORMNAME   As Long = 32

'鼠标光标结构
Private Type POINTAPI
    X As Long
    Y As Long
End Type

'设备场景模式结构
Private Type DEVMODE
    dmDeviceName       As String * CCHDEVICENAME
    dmSpecVersion      As Integer
    dmDriverVersion    As Integer
    dmSize             As Integer
    dmDriverExtra      As Integer
    dmFields           As Long
    dmOrientation      As Integer
    dmPaperSize        As Integer
    dmPaperLength      As Integer
    dmPaperWidth       As Integer
    dmScale            As Integer
    dmCopies           As Integer
    dmDefaultSource    As Integer
    dmPrintQuality     As Integer
    dmColor            As Integer
    dmDuplex           As Integer
    dmYResolution      As Integer
    dmTTOption         As Integer
    dmCollate          As Integer
    dmFormName         As String * CCHFORMNAME
    dmUnusedPadding    As Integer
    dmBitsPerPel       As Long
    dmPelsWidth        As Long
    dmPelsHeight       As Long
    dmDisplayFlags     As Long
    dmDisplayFrequency As Long
End Type

'创建设备场景句柄
Private Declare Function CreateDC _
Lib "gdi32" Alias "CreateDCA" ( _
     ByVal lpDriverName As String, _
     ByVal lpDeviceName As String, _
     ByVal lpOutput As String, _
     ByRef lpInitData As DEVMODE _
) As Long

'删除创建的设备场景句柄
Private Declare Function DeleteDC _
Lib "gdi32" ( _
     ByVal hdc As Long _
) As Long

'获取当前鼠标屏幕位置
Private Declare Function GetCursorPos _
Lib "user32" ( _
     ByRef lpPoint As POINTAPI _
) As Long

'获取像素点颜色
Private Declare Function GetPixel _
Lib "gdi32" ( _
     ByVal hdc As Long, _
     ByVal X As Long, _
     ByVal Y As Long _
) As Long


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   
    Dim udtDevMode As DEVMODE
    Dim udtPoint   As POINTAPI
   
    Dim hCurrentDc    As Long
    Dim lngColor      As Long

    '建立一个屏幕 DC
    hCurrentDc = CreateDC("DISPLAY", vbNullString, vbNullString, udtDevMode)

    If GetCursorPos(udtPoint) <> 0 Then
       lngColor = GetPixel(hCurrentDc, udtPoint.X, udtPoint.Y)
       Me.Line (0, 0)-(500, 500), lngColor, BF
    End If
   
    '不要忘记删除 DC
    Call DeleteDC(hCurrentDc)

End Sub

 
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2004-7-31 03:06 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2004-8-1 01:56 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网 |网站地图

GMT+2, 2024-5-4 05:22 , Processed in 0.077149 second(s), 17 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表