Sign in to follow this  
Followers 0
dickep

Leqrning PixelGetColor and not working

3 posts in this topic

I amtrying to see how to use PixelGetColor for another project.

Now, I copied a script sent to me and am trying to get the thing to work - somewhere.

I want to use Power Meter since I think (there I go again, thinking....) that it should be "simple". NOT!!

You will notice that the mouse moves sometimes differently than what you would expect.

Also, my data is put into a spreadsheet and converted to colors. Mostly it appears that when something does get captured, it is the behind the window.

Thanks

Here is my lame attempt:

Opt("PixelCoordMode", 2)

Dim $appTitle = "Power Meter"
Dim $appControl = "Button2"
WinActivate($appTitle)
Sleep(1000)
Dim $pos = ControlGetPos($appTitle, "", $appControl)
Dim $hWnd = WinGetHandle($appTitle)
dim $tWindow = ControlGetText($appTitle,"", 1002)
Dim $output = ""
WinActivate($appTitle)
Sleep(1000)

For $i = 0 to $pos[3]
    For $j = 0 to $pos[2]
        MouseMove($pos[0] + $j, $pos[1] + $i)
        Dim $hexColor = Hex(PixelGetColor($pos[0] + $j, $pos[1] + $i, $hWnd), 6)
        $output = $output & ($hexColor & @TAB)
    ;MouseMove($i, $j)
    Next
    $output = $output & @CRLF
Next

ClipPut($output)

MsgBox(0, "",  "Done!")

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Here take a look at a script I wrote which will give you an idea of how to use PixelGetColor and also with locating mouse pointers whether over different client windows or the desktop.

#include <GuiConstants.au3>
#include <date.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
Opt("GUIOnEventMode", 1)
Opt("WinTitleMatchMode", 4) ; set title matchmode to advanced

Global $xoffset = 37
Global $yoffset = 23
Global $wposx, $wposy, $DT, $cWIN, $xcalcL, $xcalcR, $ycalc, $cpos, $pos, $tpos, $hexV, $_color
Global $title = "Your Title Here"

HotKeySet("!{ESC}", "Terminate") ; a way out of this
HotKeySet("!f", "_color"); check for color

$pGUI = GUICreate($title, 150, 13, -1, -1, $WS_POPUP)
$startLAB = GUICtrlCreateLabel(" X: 0000, Y: 0000, C: 000000000", 0, 0, 150, 13)
GUICtrlSetBkColor($startLAB, 0xCCFFFF)

WinSetOnTop($pGUI, "", 1)

GUISetState(@SW_SHOW)

While 1
    _checkWIN()
    _nMGP()
WEnd

Func _nMGP()
    Sleep(0010)
    $pos = MouseGetPos()
    If not IsArray($pos) then return 
    $_color = PixelGetColor($pos[0],$pos[1])
    GUICtrlSetData($startLAB, ' X: ' & $pos[0] & ', Y: ' & $pos[1] & ', C: ' & $_color)
    If $DT = 1 Then
        $xcalcR = .95 * @DesktopWidth
        $xcalcL = .05 * @DesktopWidth
        $ycalc = .90 * @DesktopHeight
        If $pos[1] > $ycalc Then
            $wposy = $pos[1] - $yoffset * 2 ; If too close to bottom of screen position above mouse pointer
        Else
            $wposy = $pos[1] + $yoffset ; Position label beneath the mouse pointer
        EndIf
        If $pos[0] > $xcalcR Then ; If too close to right side of screen move it
            $wposx = $pos[0] - $xoffset * 3
        ElseIf $pos[0] < $xcalcL Then ; If too close to left side of screen move it
            $wposx = $pos[0] + 10
        Else
            $wposx = $pos[0] - $xoffset ; Use normal offsets for positioning label
        EndIf
    Else
        _clientmouse()
    EndIf
    WinMove($title, "", $wposx, $wposy) ; Move the label appropriate to follow the mouse
EndFunc   ;==>_nMGP
Func _checkWIN()
    $cWIN = WinGetTitle("[ACTIVE]")
    If $cWIN <> $title Then
        TrayTip("", $cWIN, 30)
        Opt("MouseCoordMode", 0)
        $DT = 0
    Else
        TrayTip("", "DESKTOP", 30)
        Opt("MouseCoordMode", 1)
        $DT = 1
    EndIf
EndFunc   ;==>_checkWIN

Func _clientmouse()
    Opt("MouseCoordMode", 1)
    $tpos = MouseGetPos()
    $_color = PixelGetColor($tpos[0],$tpos[1])
    Global $cpos = WinGetPos($cWIN)
    If not IsArray($cpos) then return 
    $xcalcR = .95 * $cpos[2]
    $xcalcL = .05 * $cpos[2]
    $ycalc = .90 * $cpos[3]
    If $tpos[1] > $ycalc Then
        $wposy = $tpos[1] - $yoffset * 2 ; If too close to bottom of screen position above mouse pointer
    Else
        $wposy = $tpos[1] + $yoffset ; Position label beneath the mouse pointer
    EndIf
    If $tpos[0] > $xcalcR Then ; If too close to right side of screen move it
        $wposx = $tpos[0] - $xoffset * 3
    ElseIf $tpos[0] < $xcalcL Then ; If too close to left side of screen move it
        $wposx = $tpos[0] + 10
    Else
        $wposx = $tpos[0] - $xoffset ; Use normal offsets for positioning label
    EndIf
EndFunc   ;==>_clientmouse

Func _color()
    Local $_cpos = MouseGetPos()
    Local $pcolor
    $pcolor = PixelGetColor($_cpos[0],$_cpos[1])
    $hexV = "0x" & Hex($pcolor,6)
    Local $fOpen = FileOpen(@ScriptDir & "\color.txt",1) 
    FileWrite($fOpen,@CRLF & _NowDate() & " " & _NowTime() & " : " & "X: " & $_cpos[0] & _ 
        "," & "Y: " & $_cpos[1] & " | " & "Hex: " & $hexV & " Color: " & $pcolor)
    FileClose($fOpen)
EndFunc

Func Terminate()
    Exit 0
EndFunc   ;==>Terminate

Alt+ESC will terminate the app.

Alt+F will mark the colors..

Click my sig for Mouse Pointer for more details.

Edited by Ealric

My Projects: [topic="89413"]GoogleHack Search[/topic], [topic="67095"]Swiss File Knife GUI[/topic], [topic="69072"]Mouse Location Pointer[/topic], [topic="86040"]Standard Deviation Calculator[/topic]

Share this post


Link to post
Share on other sites

Thanks. Very interesting and gives me more ideas for another project, but...

Try to get the color of a checkbox in the Power Meter window. Your application - and my attempt - don't seem to really get the pixel color of the check mark in the box. I unchecked the box and hovered over the box with - well - no change in the color number.

Still trying to figure this out.

Any other ideas or help??? I really would like to use this for various projects with radio buttons and check marks

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0