Jump to content
Sign in to follow this  
Nahuel

Pixel Color V2.

Recommended Posts

This script was also the basis for my COP script. Here's a quick and dirty update of the original code.

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

 AutoIt Version: 3.2.12.1
 Author:         Nahuel (3.2.10.0)
                 KaFu (update to 3.2.12.1) 2008-Oct-01

 Url:            http://www.autoitscript.com/forum/index.php?showtopic=53471
 Script Function:
    Pixel Color V2., Now with magnifier and some other stuff (updated to 3.2.12.1)

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


#include<GUIconstants.au3>
#include<Misc.au3>
#include<WindowsConstants.au3>
#include<EditConstants.au3>
#include<StaticConstants.au3>
#NoTrayIcon

Opt("WinTitleMatchMode", 4)
Opt("WinWaitDelay", 0)
Opt("GUIonEventMode",1)

;~ Global $SRCCOPY = 0x00CC0020
Global $leave = 0
Global $Paused=0
$MouseModifier = 1
$PressedTime = 1

HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{INS}", "_copyHEX")

Tooltip("AU3MAG", 0, 0,"","",4)
$MyhWnd = WinGetHandle("classname=tooltips_class32")

GUICreate("Pixel Color", 180, 410,0, 0, -1, $WS_EX_TOPMOST)
GUISetOnEvent($GUI_EVENT_CLOSE,"_exit")

GUICtrlCreateGroup(" Mouse coords ", 10, 10, 160, 50)
GUICtrlCreateLabel("X:", 25, 33, 15, 15)
$MousePosX=GUICtrlCreateInput("", 40, 30, 40, 20, $ES_READONLY)
GUICtrlCreateLabel("Y:", 90, 33, 15, 15)
$MousePosY=GUICtrlCreateInput("", 105, 30, 40, 20, $ES_READONLY)

GUICtrlCreateGroup(" Color codes ", 10, 70, 160, 110)
GUICtrlCreateLabel("Decimal:", 25, 93, 50, 15)
$PixelColor=GUICtrlCreateInput("", 80, 90, 70, 20, $ES_READONLY)
GUICtrlCreateLabel("Hex:", 25, 123, 50, 15)
$hexColor=GUICtrlCreateInput("", 80, 120, 70, 20,$ES_READONLY)
GUICtrlCreateLabel("Color:", 25, 153, 50, 15)
$MostrarColor=GUICtrlCreateLabel("", 80, 150, 70, 20,$ES_READONLY)

GUICtrlCreateGroup(" Special options ", 10, 190, 160, 145)
$RB_Full = GUICtrlCreateRadio("Full Screen", 25, 210, 100, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
$RB_Window = GUICtrlCreateRadio("Active Window", 25, 230, 100, 20)
$Mag= GUICtrlCreateCheckbox("Magnify", 25, 250, 100, 20)
$Solid= GUICtrlCreateRadio("Solid crosshair", 35, 270, 100, 20)
$Inver= GUICtrlCreateRadio("Inverted crosshair", 35, 290, 120, 20)
$KeyBMouse= GUICtrlCreateCheckbox("Move cursor with keyb.", 25, 310, 140, 20)

$Ayuda=GUICtrlCreateButton("Help",10,345,77)
GUICtrlSetOnEvent(-1,"Ayuda")
$Saltar=GUICtrlCreateButton("Jump to",92,345,77)
GUICtrlSetOnEvent(-1,"Saltar")

GUICtrlCreateLabel("PAUSE: Freeze/Unfreeze", 0, 380 ,180,15,$SS_CENTER)
GUICtrlSetColor(-1,0x00808080)
GUICtrlCreateLabel("INS: Copy hex code to clipboard", 0, 395 ,180,15,$SS_CENTER)
GUICtrlSetColor(-1,0x00808080)


GUISetState()
data()

Func data()

    While 1
        Sleep(50)
        Opt("WinTitleMatchMode",4)
        If (_IsPressed(25) + _IsPressed(26) + _IsPressed(27) + _IsPressed(28)) = 0 Then
        _ResetSpeed()
        EndIf
        $msg=GUIGetMsg()
        Select
            Case $msg=$GUI_EVENT_CLOSE
                Exit
        EndSelect
        
        If GUICtrlRead($KeyBMouse)=$GUI_CHECKED Then
            MouseKeyb()
        Else
            MouseKeybNO()
        EndIf
        
        If GUICtrlRead($Mag)=$GUI_CHECKED Then
            GUICtrlSetState($RB_Window,$GUI_DISABLE)
            GUICtrlSetState($Solid,$GUI_ENABLE)
            GUICtrlSetState($Inver,$GUI_ENABLE)
            GUICtrlSetState($RB_Full,$GUI_CHECKED)
            WinSetState($MyhWnd,"",@SW_SHOW)
            MAG()
            
        Else
            GUICtrlSetState($Solid,$GUI_DISABLE+$GUI_UNCHECKED)
            GUICtrlSetState($Inver,$GUI_DISABLE+$GUI_UNCHECKED)
            GUICtrlSetState($RB_Window,$GUI_ENABLE)
            WinSetState($MyhWnd,"",@SW_HIDE)
        EndIf
        If GUICtrlRead($RB_Full) = $GUI_CHECKED Then
            Opt("MouseCoordMode", 1)
            Opt("PixelCoordMode", 1)
            $pos=MouseGetPos()
            $color=PixelGetColor($pos[0],$pos[1])
            GUICtrlSetData($MousePosX, $pos[0])
            GUICtrlSetData($MousePosY, $pos[1])
            GUICtrlSetData($PixelColor,$color)
            $HEX6=StringRight(Hex($color),6)
            GUICtrlSetData($hexColor,"0x"&$HEX6)
            GUICtrlSetBkColor($MostrarColor,"0x"&Hex($color))
        Else
            Opt("MouseCoordMode", 0)
            Opt("PixelCoordMode", 0)
            Opt("WinTitleMatchMode",1)
            $win = WinGetPos("")
            $pos=MouseGetPos()
            If $pos[0] >= 0 And $pos[0] <= $win[2] and $pos[1] >= 0 And $pos[1] <= $win[3] Then
                $color=PixelGetColor($pos[0],$pos[1])
                GUICtrlSetData($MousePosX, $pos[0])
                GUICtrlSetData($MousePosY, $pos[1])
                GUICtrlSetData($PixelColor,$color)
                $HEX6=StringRight(Hex($color),6)
                GUICtrlSetData($hexColor,"0x"&$HEX6)
                GUICtrlSetBkColor($MostrarColor,"0x"&Hex($color))
            Else
                GUICtrlSetData($MousePosX, "----")
                GUICtrlSetData($MousePosY, "----")
                GUICtrlSetData($PixelColor,"")
                GUICtrlSetData($hexColor,"")
            EndIf
        EndIf
    WEnd
EndFunc

Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
        sleep(10)
        $msg=GUIGetMsg()
        Select
            Case $msg=$GUI_EVENT_CLOSE
                Exit
        EndSelect
    WEnd
EndFunc

Func MAG()
  $MyHDC = DLLCall("user32.dll","int","GetDC","hwnd",$MyhWnd)
  If @error Then Return
  $DeskHDC = DLLCall("user32.dll","int","GetDC","hwnd",0)
  If Not @error Then
     $xy = MouseGetPos()
     If Not @error Then
        $l = $xy[0]-10
        $t = $xy[1]-10
        DllCall("gdi32.dll","int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", 100, "int", 100, "int", $DeskHDC[0], "int", $l, "int", $t, "int", 20, "int", 20, "long", $SRCCOPY)
        If $xy[0]<(@DesktopWidth-120) then
            $XArea= $xy[0] + 20
        Else
            $XArea= $xy[0] - 120
        EndIf
        If $xy[1]<(@DesktopHeight-120) then
            $YArea= $xy[1] + 20
        Else
            $YArea= $xy[1] - 120    
        EndIf
        WinMove($myhwnd, "",$XArea,$YArea , 100, 100)
        If GUICtrlRead($Solid)=$GUI_CHECKED Then
            CrossHairsSOLID($MyHDC[0])
        EndIf
        If  GUICtrlRead($Inver)=$GUI_CHECKED Then
            CrossHairsINV($MyHDC[0])
        EndIf
     EndIf
     DLLCall("user32.dll","int","ReleaseDC","int",$DeskHDC[0],"hwnd",0)
  EndIf
  DLLCall("user32.dll","int","ReleaseDC","int",$MyHDC[0],"hwnd",$MyhWnd)
EndFunc

Func Ayuda()
    MsgBox(0,"Help","*Use magnifier for more presicion." & @CRLF & "" & @CRLF & "*Use 'move cursor with keyboard' option for more presicion." & @CRLF & "   -Keeping arrow key pressed increases speed." & @CRLF & "   -Shift+'arrow' moves mouse cursor faster." & @CRLF & "" & @CRLF & "*Use 'Jump to' to move mouse cursor to a specified pixel" & @CRLF & @CR&"*Press PAUSE to freeze and unfreeze." & @CRLF & "" & @CRLF &"*Press INS to copy HEX code to clipboard.")
EndFunc

Func Saltar()
    Do
    $SaltarCord=InputBox("Jump to","Enter pixel coordinates you want to jump to."&@CRLF&"Example: 123,420",MouseGetPos(0)&","&MouseGetPos(1),"",150,150)
    $CoordsM=StringSplit($SaltarCord,",")
    Until @error OR ($CoordsM[1]<=@DesktopWidth AND $CoordsM[2]<=@DesktopHeight)
    if not @error Then
        BlockInput(1)
        MouseMove($CoordsM[1],$CoordsM[2])
        BlockInput(0)
    EndIf    
EndFunc

Func MouseKeyb()

HotKeySet("+{UP}", "_UpArrow")
HotKeySet("{UP}", "_UpArrow")
HotKeySet("+{DOWN}", "_DownArrow")
HotKeySet("{DOWN}", "_DownArrow")
HotKeySet("+{LEFT}", "_LeftArrow")
HotKeySet("{LEFT}", "_LeftArrow")
HotKeySet("+{RIGHT}", "_RightArrow")
HotKeySet("{RIGHT}", "_RightArrow")
EndFunc

Func MouseKeybNO()
HotKeySet("+{UP}")
HotKeySet("{UP}")
HotKeySet("+{DOWN}")
HotKeySet("{DOWN}")
HotKeySet("+{LEFT}")
HotKeySet("+{LEFT}")
HotKeySet("{LEFT}")
HotKeySet("+{RIGHT}")
HotKeySet("{RIGHT}")
EndFunc

Func nada()
EndFunc

Func _copyHEX()
    ClipPut(Guictrlread($hexColor))
EndFunc;==>_ShowInfo

Func _UpArrow()
    Local $MousePos = MouseGetPos()
    If _IsPressed(10) Then
        $i = 10
    Else
        $i = 1
    EndIf
    
    If $MousePos[1] > 0 Then
        _BoostMouseSpeed()
        MouseMove($MousePos[0], $MousePos[1] - ($MouseModifier * $i), 1)
    EndIf
EndFunc;==>_UpArrow

Func _DownArrow()
    If _IsPressed(10) Then
        $i = 10
    Else
        $i = 1
    EndIf

    Local $MousePos = MouseGetPos()
    If $MousePos[1] < @DesktopHeight Then
        _BoostMouseSpeed()
        MouseMove($MousePos[0], $MousePos[1] + ($MouseModifier * $i),1)
    EndIf
EndFunc;==>_DownArrow

Func _LeftArrow()
    If _IsPressed(10) Then
        $i = 10
    Else
        $i = 1
    EndIf

    Local $MousePos = MouseGetPos()
    If $MousePos[0] > 0 Then
        _BoostMouseSpeed()
        MouseMove($MousePos[0] - ($MouseModifier * $i), $MousePos[1],1)
    EndIf
EndFunc;==>_LeftArrow

Func _RightArrow()
    If _IsPressed(10) Then
        $i = 10
    Else
        $i = 1
    EndIf

    Local $MousePos = MouseGetPos()
    If $MousePos[0] < @DesktopWidth Then
        _BoostMouseSpeed()
        MouseMove($MousePos[0] + ($MouseModifier * $i), $MousePos[1],1)
    EndIf
EndFunc;==>_RightArrow

Func _BoostMouseSpeed()
        If IsInt($PressedTime / 10) Then
            $MouseModifier = $MouseModifier + 1
            $PressedTime = $PressedTime + 1
        Else
            $PressedTime = $PressedTime + 1
        EndIf
EndFunc

Func _ResetSpeed()
    $MouseModifier = 1
    $PressedTime = 1
EndFunc;==>_ResetSpeed

Func CrossHairsSOLID(ByRef $hdc)
    Local $hPen, $hPenOld
    $hPen = DllCall("gdi32.dll", "hwnd", "CreatePen", "int", 0, "int", 5, "int", 0x555555)
    $hPenOld = DllCall("gdi32.dll", "hwnd", "SelectObject", "int", $hdc, "hwnd", $hPen[0])
    DllCall("gdi32.dll", "int", "MoveToEx", "int", $hdc, "int", 52, "int", 0, "ptr", 0)
    DllCall("gdi32.dll", "int", "LineTo", "int", $hdc, "int", 52, "int", 46)
    DllCall("gdi32.dll", "int", "MoveToEx", "int", $hdc, "int", 52, "int", 58, "ptr", 0)
    DllCall("gdi32.dll", "int", "LineTo", "int", $hdc, "int", 52, "int", 100)
    DllCall("gdi32.dll", "int", "MoveToEx", "int", $hdc, "int", 0, "int", 52, "ptr", 0)
    DllCall("gdi32.dll", "int", "LineTo", "int", $hdc, "int", 46, "int", 52)
    DllCall("gdi32.dll", "int", "MoveToEx", "int", $hdc, "int", 58, "int", 52, "ptr", 0)
    DllCall("gdi32.dll", "int", "LineTo", "int", $hdc, "int", 100, "int", 52)
    DllCall("gdi32.dll", "hwnd", "SelectObject", "int", $hdc, "hwnd", $hPenOld[0])
    DllCall("gdi32.dll", "int", "DeleteObject", "hwnd", $hPen[0])
EndFunc   ;==>CrossHairsSOLID


Func CrossHairsINV(ByRef $hdc)
;~     Local CONST $NOTSRCCOPY = 0x3300087
    DllCall("gdi32.dll", "int", "BitBlt", "int", $hdc, "int", 50, "int", 0, "int", 5, "int", 49, "int", $hdc, "int", 50, "int", 0, "int", $NOTSRCCOPY)
    DllCall("gdi32.dll", "int", "BitBlt", "int", $hdc, "int", 50, "int", 56, "int", 5, "int", 49, "int", $hdc, "int", 50, "int", 56, "int", $NOTSRCCOPY)
    DllCall("gdi32.dll", "int", "BitBlt", "int", $hdc, "int", 0, "int", 50, "int", 49, "int", 5, "int", $hdc, "int", 0, "int", 50, "int", $NOTSRCCOPY)
    DllCall("gdi32.dll", "int", "BitBlt", "int", $hdc, "int", 56, "int", 50, "int", 44, "int", 5, "int", $hdc, "int", 56, "int", 50, "int", $NOTSRCCOPY)
EndFunc   ;==>CrossHairsINV

Func _exit()
    Exit
EndFunc

Best Regards

Share this post


Link to post
Share on other sites

thanks :)

but I already done this:

update includes

it's not enough

magnify with crosshair doesn't work as it supposed to

edit:

it's vista's bug

i launched kafu's cop script and had the same bug

Edited by Kilhian

Share this post


Link to post
Share on other sites

thanks ^_^

but I already done this:

update includes

it's not enough

magnify with crosshair doesn't work as it supposed to

edit:

it's vista's bug

i launched kafu's cop script and had the same bug

6 months later, I'm back

here is a screen

Posted Image

I'm currently making an AutoIt application that will help ALS people like me who can't speak and have a bad sight

this magnify with a crosshair would be usefull

Thanks

Kilhian

Edited by Kilhian

Share this post


Link to post
Share on other sites

first time poster, long time lurker.  Tried this on win 10, works if screen is set to 100% text sizing.  If you turn text sizing up (as an example i have it on 150% because i use a 4k monitor) then it throws everything off.  

Kind Regards

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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...