Mouse Check Color

  • Hallo.
    Da ich es gerne farbig mag, arbeite ich viel mit Farben. Und so wirklich habe ich den dreh noch nicht raus genau die richtige Farbe zu bestimmen.
    Vielleicht geht es nicht nur mir so.
    Also hab ich mir mal schnell ein kleines Tool geschrieben, womit man durch ein Mouseclick die Farbe der aktuellen Mouse-Position herauskriegt.
    Diese Farbe wird mit hexadezimalen Zahlen dargestellt. Damit man es nicht abschreiben muss, habe ich eine Funktion geschrieben, womit man die Farbe in die Zwischenlage ablegen kann. Dabei wird leider eine Ini-Datei erstellt.
    Aber ihr könnt es euch mal selber anschauen.


    EDIT (30.10.2011): Beide Scripte funktionieren nicht einwandfrei. Bitte für ein komplett funktionierendes Programm den Dateianhang "v.1.1" runterladen!

    Hier ohne GUI:

    Spoiler anzeigen
    [autoit]


    #include <Misc.au3>
    Global $Farbe = False
    IniWrite("Name.ini","Name","Name","0")

    [/autoit] [autoit][/autoit] [autoit]

    TrayTip("Bereit","Programm ist bereit. Mit Esc beenden. Mit Klicken Farbe herausbekommen", 20, 1)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If _IsPressed("1B") Then Exit
    If $Farbe = False Then
    If _IsPressed("01") Then
    $pos = MouseGetPos()
    $pix = PixelGetColor($pos[0], $pos[1])
    $text = StringFormat("%#06x\t",$pix)
    TrayTip("Farbe",$text & " - Mit Eingabe eine MsgBox öffnen. Mit Delete andere Farbe herausfinden",20)
    $Farbe = True
    EndIf
    EndIf
    If $Farbe = True Then
    If _IsPressed("0D") Then
    IniWrite("Name.ini","Name","Name",$text)
    $ini = IniRead("Name.ini","Name","Name",0)
    ClipPut($ini)
    $Farbe = False
    EndIf
    EndIf
    If $Farbe = True Then
    If _IsPressed("08") Then
    $Farbe = False
    EndIf
    EndIf
    WEnd

    [/autoit]

    Hier mit GUI:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Farbwahl = True

    [/autoit] [autoit][/autoit] [autoit]

    TrayTip("Bereit","Programm ist bereit. Mit Esc beenden. Mit Klicken Farbe herausbekommen", 20, 1)

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Color", 200, 200)
    $hLabel = GUICtrlCreateLabel("", 10, 10, 180, 80)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $hButton1 = GUICtrlCreateButton("In Zwischenablage",80,160)
    $hButton2 = GUICtrlCreateButton("Neue Farbe",10,160)
    $hLabel2 = GUICtrlCreateLabel("",10,100,90,50)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If _IsPressed("1B") or GUIGetMsg() = -3 Then Exit
    If $Farbwahl = False then
    If _IsPressed("01") Then ;Linke Maustaste
    $maus = MouseGetPos()
    $farbe = PixelGetColor( $maus[0], $maus[1])
    GUICtrlSetBkColor($hLabel, "0x"&StringRight(Hex($farbe),6))
    GUICtrlSetData($hLabel2, "0x"&StringRight(Hex($farbe),6))
    $Farbwahl = True
    TrayTip("Farbe","0x"&StringRight(Hex($farbe),6) & " - GUI öffnen für weitere Funktionen", 10)
    EndIf
    EndIf
    $msg = GUIGetMsg()
    If $Farbwahl = True then
    Switch $msg
    Case $hButton1
    ClipPut("0x"&StringRight(Hex($farbe),6))
    Case $hButton2
    GUICtrlSetBkColor($hLabel, 0xFFFFFF)
    $Farbwahl = False
    EndSwitch
    EndIf
    WEnd

    [/autoit]

    Ach ja. Mit ESC kann man das Programm beenden.


    UPDATE: Stand 30.10.2011:

    Habe nach langer Zeit mal wieder das Programm überarbeitet.
    Es ist nun mit GUI, die Buttons sollten nun keine Bugs mehr enthalten, und man kann die Farbe direkt danach in die Zwischenablage abspeichern.
    Viel Spaß. Falls es Probleme gibt, dann schickt mir einfach eine Nachricht.

  • Hi,
    ein nützliches Programm für Designer wie mich. :)
    Ich bin auch schonmal auf die Idee gekommen, soetwas
    zu programmieren, aber irgendwie nie dazu gekommen.^^

    Zu deinem Problem mit der INI. Warum erstellst du denn
    eine INI?^^ Das geht auch ohne: :P
    (Achja, habe deinen Code etwas verkürzt. ;))

    Veränderter Code
    [autoit]


    #include <Misc.au3>
    Global $Farbwahl = False
    TrayTip("Bereit","Programm ist bereit. Mit Esc beenden. Mit Klicken Farbe herausbekommen", 20, 1)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If _IsPressed("1B") Then Exit ;Escape Taste
    If $Farbwahl = False Then
    If _IsPressed("01") Then ;Linke Maustaste
    $pos = MouseGetPos()
    $Farbe = StringFormat("%#06x\t",PixelGetColor($pos[0], $pos[1]))
    TrayTip("Farbe",$Farbe & " - Mit Eingabe eine MsgBox öffnen. Mit Backspace andere Farbe herausfinden",20)
    $Farbwahl = True
    EndIf
    EndIf
    If $Farbwahl = True Then
    If _IsPressed("0D") Then ;Return Taste
    ClipPut($Farbe)
    $Farbwahl = False
    EndIf
    EndIf
    If $Farbwahl = True Then
    If _IsPressed("08") Then ;Backspace Taste
    $Farbwahl = False
    EndIf
    EndIf
    WEnd

    [/autoit]

    Es wäre vielleicht auch nciht schlecht, wenn du eine
    GUI baust. In der wird dann immer die aktuelle Farbe
    angezeigt und dort kann man dann auf "Kopieren" und "Ende"
    oder so klicken. Dadurch würde dann ein möglicher Konflikt
    mit den Tasten zu dem gewünschen Programm o.Ä. aus
    dem man die Farben ziehen möchte entfallen.


    MfG
    qixx

  • Das finde ich komisch.
    Ich hatte es so wie du.
    Wirklich. :)
    Aber da war es so dass das hier in die Zwischenablage gesetzt wurde "%#06x\t".
    Mit der Ini war das Problem nicht.
    Mit der GUI, dass könnte ich echt machen.

  • hey das erinnert mich an eins meiner ersten programme. immer wieder cool wenn man sieht wie ähnlich viele programme sind ohne dass man je darüber gesprochen hat ^^

  • Hab mal versucht, dass mit einer GUI zu schreiben.
    Da gibts ein großes Problem. Das Farbbeispiel ist immer schwarz, da die Farbe am Ende der hexadezimalen Zahl noch Leerstellen hat.
    Wie könnte man sowas lösen?

  • ich häng dir mal mein script von damals an,
    vllt intressierts dich ja.

    is zwar ziemlich einfach gescriptet ( wie gesagt ich glaub das war mein 5tes script oder so) aber es funktioniert und ist mit gui

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #NoTrayIcon
    HotKeySet("{F10}", "Pixelfarbe")
    Global $maus, $farbe

    [/autoit] [autoit][/autoit] [autoit]

    $Wurm = GUICreate("F10 für Mausfarbe", 242, 320, 194, 127)
    GUICtrlCreateGroup("Farbe:", 120, 8, 113, 49)
    GUICtrlCreateGroup("", 8, 56, 225, 65)
    GUICtrlCreateGroup("Rot", 16, 64, 65, 49)
    GUICtrlCreateGroup("Grün", 88, 64, 65, 49)
    GUICtrlCreateGroup("Blau", 160, 64, 65, 49)
    $Rot = GUICtrlCreateInput("0", 25, 81, 48, 25, 0x2001)
    GUICtrlSetLimit(GUICtrlCreateUpdown($Rot), 255, 0)
    $Gruen = GuiCtrlCreateInput("0", 97, 81, 48, 25, 0x2001)
    GUICtrlSetLimit(GUICtrlCreateUpdown($Gruen), 255, 0)
    $Blau = GuiCtrlCreateInput("0", 169, 81, 48, 25, 0x2001)
    GUICtrlSetLimit(GUICtrlCreateUpdown($Blau), 255, 0)
    GUICtrlCreateGroup("Hexwert", 8, 8, 105, 49)
    $Color = GUICtrlCreateInput("", 17, 24, 86, 24)
    GUICtrlSetLimit($Color, 6)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Graphic = GUICtrlCreateGraphic(128, 24, 94, 21)
    GUICtrlCreatePic( @ScriptDir & "\Farbpalette.bmp", 15, 132, 212, 180)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    WinSetOnTop("F10 für Mausfarbe", "", 1)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Color
    GUICtrlSetBkColor($Graphic, "0x"&GUICtrlRead($Color))
    GUICtrlSetData( $Rot, Dec(StringLeft(GUICtrlRead($Color), 2)))
    GUICtrlSetData( $Gruen, Dec(StringMid(GUICtrlRead($Color), 3, 2)))
    GUICtrlSetData( $Blau, Dec(StringRight(GUICtrlRead($Color), 2)))
    Case $Rot
    GUICtrlSetData( $Color, StringRight(Hex(Guictrlread($Rot)), 2) & StringRight(Hex(GUICtrlRead($Gruen)), 2) & StringRight(Hex(Guictrlread($Blau)), 2))
    GUICtrlSetBkColor($Graphic, "0x"&GUICtrlRead($Color))
    Case $Gruen
    GUICtrlSetData( $Color, StringRight(Hex(Guictrlread($Rot)), 2) & StringRight(Hex(GUICtrlRead($Gruen)), 2) & StringRight(Hex(Guictrlread($Blau)), 2))
    GUICtrlSetBkColor($Graphic, "0x"&GUICtrlRead($Color))
    Case $Blau
    GUICtrlSetData( $Color, StringRight(Hex(Guictrlread($Rot)), 2) & StringRight(Hex(GUICtrlRead($Gruen)), 2) & StringRight(Hex(Guictrlread($Blau)), 2))
    GUICtrlSetBkColor($Graphic, "0x"&GUICtrlRead($Color))
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Pixelfarbe()
    $maus = MouseGetPos()
    $farbe = PixelGetColor( $maus[0], $maus[1])
    GUICtrlSetData( $Color, StringRight(Hex($farbe), 6))
    GUICtrlSetBkColor($Graphic, "0x"&guictrlread($Color))
    GUICtrlSetData( $Rot, Dec(StringLeft(GUICtrlRead($Color), 2)))
    GUICtrlSetData( $Gruen, Dec(StringMid(GUICtrlRead($Color), 3, 2)))
    GUICtrlSetData( $Blau, Dec(StringRight(GUICtrlRead($Color), 2)))
    EndFunc

    [/autoit]


    Edit: achja bei mir isses nich die linke maustaste sondern F10 ;)

  • Bei deinem GUI: Wenn du auf den Button für
    Neue Farbe klickst, dann nimmt der ab dann schon
    die Farbe auf. Denn der Mausklick wird schon abgefragt.
    Da musst du dir was anderes einfallen lassen. ;)
    Du könntest z.B. ein Sleep einbauen. Denn es
    ist unwahrscheinlich, dass jemand den Button ne
    Sekunde lang drückt, o.Ä..

    [autoit]


    Case $hButton2
    GUICtrlSetBkColor($hLabel, 0xFFFFFF)
    Sleep(500)
    $Farbwahl = False

    [/autoit]

    Vielleicht solltest du auch unter der Farbe, die im
    GUI angezeigt wird, den Hexa-Code hinschreiben. ;)


    MfG
    qixx

  • Achso.
    Beim ersten Klick muss man nicht auf Neue Farbe klicken.
    Wenn man das doch will, dann muss man in Zeile 13 $Farbwahl auf True setzen.

    Edit: Habe das GUI Script oben umgeändert. Beim ersten Klick muss man jetzt auch auf Neue Farbe klicken. Und ein Label mit Hexa-Zahlen ist dazu gekommen.