Link to home
Start Free TrialLog in
Avatar of panspermia
panspermia

asked on

Get Color of a Pixel Given Current Mouse Location (i.e. RGB color of X,Y)

I've looked everywhere.  Given the coordinates of a point on the screen (such as 185,185), how do
you get the color of said point using VB.NET 2003.

I have looked EVERYWHERE for this, but to no avail.  All the examples I've
seen use old code that is no longer supported in .NET.

For example, there are numerous places that have quoted the routine:
Private Type POINTAPI
    X As Long
    Y As Long
End Type

since TYPE is not supported in .NET 2003, it doesn't help.

I got most of the following  code here from experts exchange, but it doesn't work-  it just keeps
giving me the same dozen digit number over and over again (which has no
meaning to me).  The Mouse Position works great.  The code grabs the position of the mouse.  But it never returns any color other than RGB= 127,254,3.  AM I doing something wrong?  I'm quite desperate.

Please remember, I'm on VB.NET 2003.  Old VB code just doesn't work in this version

Public Class Form1

    Inherits System.Windows.Forms.Form
    Public Structure POINTAPI
        Public X As Long
        Public Y As Long
    End Structure
    Public Declare Function GetCursorPos Lib "USER32.dll" (ByVal lpPoint As POINTAPI) As Long
    Public Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal nXPos As Long, ByVal nYPos As Long) As Long
    Public Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As Long, ByVal hdc As Long) As Long
    Public Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
    Public Declare Function GetDesktopWindow Lib "USER32.dll" () As Long
    Private lDesktopDC As Long


#Region " Windows Form Designer generated code "
<snip>

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove

        Dim mXY As POINTAPI, mHc As Long, rgbV As Long, mDC As Long
        Dim R As Byte, G As Byte, B As Byte, rv, ry
        Dim oXY As POINTAPI, HexVal As String
        Dim color
        rv = Cursor.Position.X 'get mouse position X
        ry = Cursor.Position.Y 'get mouse position Y
        mHc = GetDesktopWindow() 'get a handle to screen
        rgbV = GetPixel(GetDC(0), rv, ry)
        '  
        '---convert color value from long to hex/rgb-----------------------
        HexVal = Hex(Val(rgbV))

        R = CLng("&H" + Mid(HexVal, 1, 2)) 'red color value
        G = CLng("&H" + Mid(HexVal, 3, 2)) 'green color value
        B = CLng("&H" + Mid(HexVal, 5, 2)) 'blue color value
        '--display information-----------------------------------------------


        TextBox1.Text = "RGB= " & R & "," & G & "," & B 'show RGB values
        TextBox2.Text = rgbV
        ReleaseDC(mHc, mDC) ' release device context

    End Sub

End Class


This code above does not work.  My real goal is to be able to grab the color of a mouse location on another application.  I'd like to do this:
AppActivate ("MyApp")
GetPixel (x,y) 'return the color of a pixel on the other application

I've spent hours in goolge and on here looking for a way to do this, but all code examples I've found are in older versions of .NET and generate errors.
ASKER CERTIFIED SOLUTION
Avatar of Mike Tomlinson
Mike Tomlinson
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of panspermia
panspermia

ASKER

You ROCK man.  You are the best.  5 stars!!!!  Thank you so much.