Jump to content

Pixel Color V2.


Nahuel
 Share

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

Link to comment
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
Link to comment
Share on other sites

  • 6 months later...

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
Link to comment
Share on other sites

  • 6 years later...

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

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...