Jump to content
willichan

MEyeDropper

Recommended Posts

willichan

Ok. Here is another quick and dirty. My old, reliable eyedropper app is not compatible with 64bit windows 7. After trying several, looking for a new one, I was unhappy with them all.

AutoIt to the rescue! This took me mere minutes to bang out, and gives me just the basic information I wanted, without being obtrusive. It will remember where you last positioned it, and whether you had it hidden or displayed.

Enjoy.

#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=MEyeDropper.ico
#AutoIt3Wrapper_Outfile=MEyeDropper.exe
#AutoIt3Wrapper_Outfile_x64=MEyeDropper64.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_Res_Description=Simple Eye Dropper utility (pronounced My Dropper)
#AutoIt3Wrapper_Res_Fileversion=1.0.0.1
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_Language=1033
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
://////=__=
://////=__=
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
#AutoIt3Wrapper_Run_Tidy=y
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/striponly
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****

#cs ----------------------------------------------------------------------------

Project Name: MEyeDropper
Description: Simple Eye Dropper utility (pronounced My Dropper)
Creation Date: 10/1/2012
AutoIt Version:
Author: willichan

#ce ----------------------------------------------------------------------------

Global Const $MyName=StringLeft(@ScriptName, StringInStr(@ScriptName,".", 0, -1)-1) ;get just the name portion of the script/exe name
Global Const $MyMutex=$MyName & "-0EFEB5039155DF6E" ;name the mutex for this app
If _MutexExists($MyMutex) Then Exit ;exit if another instance of this app is running

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Opt("MustDeclareVars", 1)    ;0=no, 1=require pre-declare
Opt("TrayAutoPause", 0)  ;0=no pause, 1=Pause
Opt("TrayMenuMode", 1)   ;0=append, 1=no default menu, 2=no automatic check, 4=menuitemID not return
Opt("TrayIconHide", 0)   ;0=show, 1=hide tray icon
Opt("PixelCoordMode", 1)     ;absolute screen coordinates
Opt("MouseCoordMode", 1)     ;absolute screen coordinates

Global $ShowEyedropper
Global $WinPosX
Global $WinPosY
Global $TrayMenuDisplay, $TrayMenuExit
Global $PixelColor, $msg, $x, $y, $h
Global $frm_dsp, $frm_dsp_x, $frm_dsp_y, $frm_dsp_r, $frm_dsp_g, $frm_dsp_b, $frm_dsp_h, $frm_dsp_sample

_ConfigInitialize()

$TrayMenuDisplay = TrayCreateItem("Display/Hide")
$TrayMenuExit = TrayCreateItem("Exit")
TraySetState()

$frm_dsp = GUICreate("MEyeDropper", 132, 145, 2278, 194, BitOR($WS_MINIMIZEBOX, $WS_GROUP, $DS_MODALFRAME))
$frm_dsp_x = GUICtrlCreateLabel("X:", 2, 0, 108, 17)
$frm_dsp_y = GUICtrlCreateLabel("Y:", 2, 16, 108, 17)
$frm_dsp_r = GUICtrlCreateLabel("R:", 2, 40, 60, 17)
$frm_dsp_g = GUICtrlCreateLabel("G:", 2, 56, 60, 17)
$frm_dsp_b = GUICtrlCreateLabel("B:", 2, 72, 60, 17)
$frm_dsp_h = GUICtrlCreateLabel("#", 2, 96, 108, 17)
$frm_dsp_sample = GUICtrlCreateLabel(" ", 64, 40, 44, 49)
_SetGuiState()

While 1
Local $msg = TrayGetMsg()
Select
Case $msg = $TrayMenuDisplay
;toggle the display
$ShowEyedropper = Not $ShowEyedropper
_SetGuiState()
Case $msg = $TrayMenuExit
Exit
EndSelect
If $ShowEyedropper Then
;Update Dropper
$x = MouseGetPos(0)
$y = MouseGetPos(1)
$PixelColor = PixelGetColor($x, $y)
$h = Hex($PixelColor, 6)
GUICtrlSetData($frm_dsp_x, $x)
GUICtrlSetData($frm_dsp_y, $y)
GUICtrlSetData($frm_dsp_h, "#" & $h)
GUICtrlSetData($frm_dsp_r, Dec(StringLeft($h, 2)))
GUICtrlSetData($frm_dsp_g, Dec(StringMid($h, 3, 2)))
GUICtrlSetData($frm_dsp_b, Dec(StringRight($h, 2)))
GUICtrlSetBkColor($frm_dsp_sample, $PixelColor)
EndIf
Sleep(100)
WEnd

Func _SetGuiState()
If $ShowEyedropper Then
GUISetState(@SW_SHOW, $frm_dsp)
Else
GUISetState(@SW_HIDE, $frm_dsp)
EndIf
EndFunc ;==>_SetGuiState

Func _ConfigInitialize()
OnAutoItExitRegister("_ConfigDestroy")
;initializers here for script startup
$WinPosX = RegRead("HKCU\Software\MEyeDropper", "LastX")
If @error or ($WinPosX<0) Then $WinPosX = 0
$WinPosY = RegRead("HKCU\Software\MEyeDropper", "LastY")
If @error or ($WinPosY<0) Then $WinPosY = 0
$ShowEyedropper = RegRead("HKCU\Software\MEyeDropper", "Visible")
If @error Then $ShowEyedropper = False;
EndFunc ;==>_ConfigInitialize

Func _ConfigDestroy()
;destructors here for script shutdown/cleanup
RegWrite("HKCU\Software\MEyeDropper", "LastX", "REG_SZ", $WinPosX)
RegWrite("HKCU\Software\MEyeDropper", "LastY", "REG_SZ", $WinPosY)
RegWrite("HKCU\Software\MEyeDropper", "Visible", "REG_SZ", $ShowEyedropper)
EndFunc ;==>_ConfigDestroy

Func _MutexExists($sOccurenceName)
;Credit goes to martin for this function
Local $ERROR_ALREADY_EXISTS = 183, $handle, $lastError
$sOccurenceName = StringReplace($sOccurenceName, "\", "")
$handle = DllCall("kernel32.dll", "int", "CreateMutex", "int", 0, "long", 1, "str", $sOccurenceName)
$lastError = DllCall("kernel32.dll", "int", "GetLastError")
Return $lastError[0] = $ERROR_ALREADY_EXISTS
EndFunc ;==>_MutexExists

Share this post


Link to post
Share on other sites
guinness

Why not use _Singleton instead of _MutexExists?


UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Share this post


Link to post
Share on other sites
willichan

Mostly out of laziness. I have some templates I made a while back that I have never got around to updating. _MutexExists() gets included in scripts that don't really need it as well. One of these days I need to redo my script templates.

---EDIT---

I was just looking at the code for _Singleton(). With the exception of the additional code for multi-user, it looks the same as _MutexExists(). Are there any other advantages to using _Singleton() over _MutexExists()?

Edited by willichan

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

×