dickep Posted February 11, 2009 Share Posted February 11, 2009 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!") Link to comment Share on other sites More sharing options...
Ealric Posted February 11, 2009 Share Posted February 11, 2009 (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. expandcollapse popup#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 February 11, 2009 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] Link to comment Share on other sites More sharing options...
dickep Posted February 12, 2009 Author Share Posted February 12, 2009 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 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now