dickep Posted February 11, 2009 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!")
Ealric Posted February 11, 2009 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]
dickep Posted February 12, 2009 Author 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
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