# PixelGetColor: Can't get correct color of pixel

## Recommended Posts

I have a program that has a control that changes color a few seconds into running. So ideally, I would poll this to tell when an event has occurred.

I can't seem to retrieve the correct color value for a control. It always seems to return white indicating that its selecting somewhere else in the window.

In the PixelGetColor call I'm adding half the width to the x value and subtracting half the height to the y value  in order to get the center of the control. (assuming the coords returned by ControlGetPos are top left - which i can't be sure of) But I've also tried without modifying the x/y and with changing the PixelCoordMode option to 2. Maybe I'm making a silly mistake and can't see it? Any help would be appreciated.

Code is below:

Opt("PixelCoordMode", 0)
FileChangeDir( "C:\Where\My\File\Is" );
Run( "MyProgram.exe" )
Local $hClient = WinWaitActive($CLIENT_TITLE, "", 10 )
Local $systemIndicatorClassNN= "[CLASS:Qt5QWindowIcon; INSTANCE:99]" Local$hSystemIndicator = ControlGetHandle ( $hClient, "",$systemIndicatorClassNN)
Local $xywh = ControlGetPos ($hClient, "", $hSystemIndicator ) For$i = 10 To 1 Step -1
$color = PixelGetColor ($xywh[0] + ($xywh[2]/2),$xywh[1] - ($xywh[3]/2),$hClient )
LogToFile( $color ) Sleep( 2000 ) Next #### Share this post ##### Link to post ##### Share on other sites Dont forget that pixelgetcolor retrieves the color in decimal, is that what you need? Also why this? For$i = 10 To 1 Step -1

Spoiler

Paster - Main function is to paste text, but has more functions.

OpenW - Open With... alternative, Open any file with any application, set it's icon, set application as default.

Renamer - Rename files and folders, remove portions of text from the filename etc.

BeatsPlayer - Music player.

Params Tool - Right click an exe to see it's parameters or execute them.

Regedit Control - Registry browsing history, quickly jump into any saved key.

Time4Shutdown - Write the time for shutdown in minutes.

Power Profiles Tool - Set a profile as active, delete, duplicate, export and import.

Firefox Profile Backup - Backup/restore previously saved profile.

Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes.

NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s.

# IUIAutomation - Topic with framework and examples

##### Share on other sites

It doesn't matter what format the color is in, as long as I can determine if it has changed. So far I've been getting the value 16777215 - which is white.

In each iteration of the for loop, I sleep the program for 2 seconds. That way it checks if the color has changed every 2 seconds.

##### Share on other sites

Maybe I don't understand how ControlGetPos works? Perhaps the coords it returns are some value I'm not expecting. I'm also using two monitors, I'm not sure if that can confuse the coordinate system?

##### Share on other sites

Ok, I finally solved it after a lot of logging!

; get the control

Local $hSystemIndicator = ControlGetHandle ($hClient, "", "SystemReadyWindow" )

; get pos and size of control

Local $xywh = ControlGetPos ($hClient, "", $hSystemIndicator ) ; check color at the center of the control, not the window$color = PixelGetColor ( $xywh [2]/2,$xywh [3]/2, $hSystemIndicator ) #### Share this post ##### Link to post ##### Share on other sites Nice you got it working Spoiler Paster - Main function is to paste text, but has more functions. OpenW - Open With... alternative, Open any file with any application, set it's icon, set application as default. Renamer - Rename files and folders, remove portions of text from the filename etc. BeatsPlayer - Music player. Params Tool - Right click an exe to see it's parameters or execute them. Regedit Control - Registry browsing history, quickly jump into any saved key. Time4Shutdown - Write the time for shutdown in minutes. Power Profiles Tool - Set a profile as active, delete, duplicate, export and import. Firefox Profile Backup - Backup/restore previously saved profile. Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes. NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s. # IUIAutomation - Topic with framework and examples #### 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 • ### Similar Content • By CodingMonkey81 All, I'm working on automating the update process for a piece of software that we use at my company. The installer file always contains the version number as a part of the file name (eg InstallFile_9342.msi) and the numbers always change with every update. How do I use AutoIt to run the program? I know I can't use a wildcard in place of the numbers when using the "Run" command. I tried Local$aArray = _FileListToArray("C:\path\to\file", "InstallFile_*.msi", 0, 1) Run("$aArray") and I also tried Local$bInstall = FileFindFirstFile("InstallFile_*.msi") Run("$bInstall") and neither worked. Can someone please point me in the right direction? I've done some searching on the forum and haven't found anyone in a similar situation before. Thanks! • By VAN0 Hello. I have a program XX that asks for user confirmation on exit, which hangs the system reboot/shutdown process until I confirm. So I decided create a autoit script that would automatically close that dialog and let the system reboot/shutdown. The problem I'm facing is that my scripts now exits before the XX. Is there a way delay script exit until the XX is closed but only when system is rebooting/shutting down? Thank you. • By Ian_Mac HotKeySet("^{SPACE}", "get_color")$colorCodeHere = ;<---------------- func get_color() Global $point = MouseGetPos() Global$color = PixelGetColor($point[0],$point[1]) MsgBox(0, "debug", "result: " & $color) EndFunc While 1 Sleep(100) WEnd Hello guys my problem is, how can i store the value that i get in that PixelGetColor($point[0], $point[0]) i know that when i msgbox the color i will show the = of$color
but i wanted it to be the value like  $colorCodeHere = 13456254. but not hardcoding the value. or how could i say if$color is = to $color then do this and if$color is not  equal to $color then do that. • By Simpel Hi, I created a gui with date field but formatted as time in HH:mm. It always shows "now-time". Even if I try to set it with GUICtrlSetData. #include <DateTimeConstants.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> Example() Func Example() GUICreate("My GUI get date", 200, 200, 800, 200) Local$idDate = GUICtrlCreateDate("", 20, 20, 100, 20, $DTS_TIMEFORMAT) ; to select a specific default format Local$sStyle = "HH:mm" ; Just display hours and minutes <<<<<<<<<<<<<<<<<<<<<<<<<<<< GUICtrlSendMsg($idDate,$DTM_SETFORMATW, 0, $sStyle) ConsoleWrite(GUICtrlRead($idDate) & @CRLF) GUICtrlSetData($idDate, "00:00") ConsoleWrite(GUICtrlRead($idDate) & @CRLF) GUISetState(@SW_SHOW) ; Loop until the user exits. While GUIGetMsg() <> $GUI_EVENT_CLOSE WEnd MsgBox($MB_SYSTEMMODAL, "Time", GUICtrlRead($idDate)) EndFunc ;==>Example How can I set the time field with another time and how can this field be set blank? Regards, Conrad • By Nitrolord I had this problem with PixelGetColor not giving me the same HEX Color as the AU3Info Tool and searched every were with no luck then had a OH DA moment LoL. The problem is that the "PixelGetColor ($mouseX[0], $mouseY[1])" is looking rite at the very tip of the mouse pointer not under it. So you have to set a -3 after the [0] and [1]. "PixelGetColor ($mouseX[0] -3, $mouseY[1] -3)" to make it search next to the pointer not on the pointer. You may have to adjust this a bit for your display but you should not have to go more then -5. -3 seems to work best for me. Example.au3 #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3>$Form1 = GUICreate("Form1", 141, 127, 276, 231) $Input1 = GUICtrlCreateInput("", 8, 8, 121, 21)$Label1 = GUICtrlCreateLabel("Press or Hold F1 to get Hex color at Mouse X -3, Y-3 Pos,", 8, 40, 124, 73) GUISetState(@SW_SHOW) HotKeySet("{f1}","MousePos") Func MousePos() $aPos = MouseGetPos()$PGC = PixelGetColor($aPos[0] -3,$aPos[1] -3) GUICtrlSetData($Input1, "0x" & Hex($PGC, 6)) EndFunc While 1 $nMsg = GUIGetMsg() Switch$nMsg Case \$GUI_EVENT_CLOSE Exit EndSwitch WEnd
×

• Wiki

• Back

• Git