Jump to content

Recommended Posts

Posted

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!")
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]

Posted

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

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
×
×
  • Create New...