Bilder mit Tasten darstellen

  • Tach

    Ich wollte ein Bild mit 4 Pfeiltasten auf dem Desktop darstellen das man noch mit der Maus verschieben kann.
    und wenn eine der Pfeiltasten gedrückt wird sollte die Taste in andere Farbe aufleuchten.
    Wie kann man so etwas Programmieren?

    Bin für jede Hilfe dankbar :D

    3 Mal editiert, zuletzt von Daniel35 (8. April 2010 um 20:48)

  • Klar schaue dir dazu den Parameter bei GUIGetMsg an (wenn du im MessageLoop Modus arbeitest) und GDI+ wenn es wirklich gut aussehen soll^^
    Ansonsten reicht es auch Pic Controls in einem GUI zu erstellen und bei einem KlickEvent das Bild zu ändern.

  • Hallo Daniel35,

    hast du es denn nicht aufgegeben einen KeyLogger zu schreiben. Der vorhergehende Thread: https://autoit.de/index.php?page…&highlight= wurde geclosed deswegen. Hast du dir den nicht die Forenregeln durchgelesen? Warum versuchst du es erneut,

    Edit: stelle gerade fest, dies ist ja schon dein 3. Versuch: https://autoit.de/index.php?page…&highlight= Übrigens habe nicht ich sondern Oscar geclosed,

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (5. April 2010 um 22:21)

  • Jo man kann ja normale buttons nehmen und das Fenster transparent machen. Kann man überhaupt das Fenster komplett transparent machen, so das man nur die Grafik sieht? :huh: Irgendo im Forum habe ich mal ein ganzes Archiv mit grafisch aufpolierten Oberflächen wie Buttons usw. gesehen. Weiß aber nicht mehr wo.
    Warum sollte ich ein Keylogger schreiben? :S Es gibt doch in google 1000 Beispiele wie man ein Keylogger mit Autoit schreibt.

    2 Mal editiert, zuletzt von Daniel35 (6. April 2010 um 19:59)

    • Offizieller Beitrag

    Wenn du nur die Buttons ohne das Fenster sehen willst, schau dir mal das Beispiel von BugFix an: "Schwebende" Button - Skriptbeispiel

  • thx raupi genau das was ich gesucht habe, kann man so etwas noch mit der maus verschieben?

  • da legste ganz oben auf die gui noch n label drauf mit dem ex style $GUI_WS_EX_PARENTDRAG
    und dan machste das unsichtbar
    also so

    [autoit]

    $Label1 = GUICtrlCreateLabel("", 0, 0, $GUIWidth, $GUIHeight, Default, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

    [/autoit]
    • Offizieller Beitrag

    Das mit dem Label ist nicht schlecht, aber das mit der Trasparenz wird nicht hinhauen.

    Spoiler anzeigen
    [autoit]

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

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

    Global $aButton[5]

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

    $gui = GUICreate("Test Windows regions2", 150, 150, @DesktopWidth-400, -1, $WS_POPUP, $GUI_WS_EX_PARENTDRAG)
    $aButton[0] = Guictrlcreatelabel(" Move me!", 0, 0, 150,21,$GUI_SS_DEFAULT_LABEL, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor($aButton[0], $GUI_BKCOLOR_TRANSPARENT)
    $aButton[1] = GUICtrlCreateButton("Button 1", 0, 30, 150)
    $aButton[2] = GUICtrlCreateButton("Button 2", 0, 60, 150)
    $aButton[3] = GUICtrlCreateButton("Button 3", 0, 90, 150)
    $aButton[4] = GUICtrlCreateButton("Exit", 0, 120, 150)
    GUISetState(@SW_SHOW)

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

    $pos = WinGetPos($gui)
    _GuiHole($gui, 0, 0, 150, 150)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $aButton[4]
    ExitLoop
    Case $aButton[1]
    MsgBox(0, '', 'Button1 geklickt')
    Case $aButton[2]
    MsgBox(0, '', 'Button2 geklickt')
    Case $aButton[3]
    MsgBox(0, '', 'Button2 geklickt')

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

    EndSwitch
    WEnd

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

    Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
    Local $outer_rgn, $inner_rgn, $combined_rgn
    $combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
    _WinAPI_DeleteObject($outer_rgn)
    _WinAPI_DeleteObject($inner_rgn)
    _AddCtrlRegion($combined_rgn, $aButton)
    _WinAPI_SetWindowRgn($h_win, $combined_rgn)
    EndFunc ;==>_GuiHole

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

    Func _AddCtrlRegion($full_rgn, $ctrl_id)
    Local $ctrl_pos, $ctrl_rgn
    If IsArray($ctrl_id) Then
    For $i = 0 To UBound($ctrl_id) -1
    $ctrl_pos = ControlGetPos($gui, "", $ctrl_id[$i])
    $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
    _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
    _WinAPI_DeleteObject($ctrl_rgn)
    Next
    Else
    $ctrl_pos = ControlGetPos($gui, "", $ctrl_id)
    $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
    _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
    _WinAPI_DeleteObject($ctrl_rgn)
    EndIf
    EndFunc ;==>_AddCtrlRegion

    [/autoit]

    PS: Wenn du das Label auf die ganze Gui legst sind die Buttons nicht mehr klickbar und das Label mit GUICtrlSetState(-1, $GUI_DISABLE) klappt auch nicht. Dann würde das Bewegen nicht mehr klappen.

    • Offizieller Beitrag

    Probier es doch am Script aus.

  • Verstehe ich richtig das man das obere Label nicht transparent und verschieben kann?

    hmm die einfachste Methode wäre dann doch von Name22. Einfach ein Bild von Tasten einblenden und bei einem KlickEvent das Bild ändern.
    Da müsste ich aber 16 Bilder erstellen. Einfacher wäre mit einem Bild der Taste das Bild mit allen 4 Tasten überblenden. Wie geht so etwas?

    Hab hier ein kleines Beispiel gefunden:

    [autoit]


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

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

    $hgui = GUICreate("test", 200, 200, -1, -1, $WS_POPUP, $WS_EX_CONTROLPARENT)
    ;~ GUICtrlCreateLabel("", 0, 0, 200, 200, Default, $GUI_WS_EX_PARENTDRAG) ;verschieben des Fensters möglich machen durch ""2. Fenster"
    GUICtrlCreatePic(@SystemDir & "\oobe\images\mslogo.jpg", 0, 0, 200, 200)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState()

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]

    Wenn man eine Taste einblendet müsste man garantiert die Position des ersten Bildes ( mit 4 Tasten) anpassen wenn das Bild mit der Maus verschoben wird, oder?

  • naja so erstellste 8 bilder jeder knopf einmal gedrückt und einmal nicht
    und dan wechselst das script die immer

    also so

    Spoiler anzeigen
    [autoit]

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

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

    $hgui = GUICreate("test", 300, 200, -1, -1, $WS_POPUP, $WS_EX_CONTROLPARENT)
    ;~ GUICtrlCreateLabel("", 0, 0, 200, 200, Default, $GUI_WS_EX_PARENTDRAG) ;verschieben des Fensters möglich machen durch ""2. Fenster"
    $up = GUICtrlCreatePic(@SystemDir & "....", 0, 0, 100, 0)
    $left = GUICtrlCreatePic(@SystemDir & "....", 0, 0, 0, 100)
    $bottom = GUICtrlCreatePic(@SystemDir & "....", 0, 0, 100, 100)
    $right = GUICtrlCreatePic(@SystemDir & "....", 0, 0, 200, 100)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState()

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

    Do
    Select
    Case _IsPressed("26")
    GUICtrlSetImage($up, "....")
    Case _IsPressed("25")
    GUICtrlSetImage($left, "....")
    Case _IsPressed("27")
    GUICtrlSetImage($right, "....")
    Case _IsPressed("28")
    GUICtrlSetImage($bottom, "....")
    Case Else
    GUICtrlSetImage($up, "....")
    GUICtrlSetImage($left, "....")
    GUICtrlSetImage($right, "....")
    GUICtrlSetImage($bottom, "....")

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

    EndSelect
    Until GUIGetMsg() = -3

    [/autoit]


    habs nicht probiert aba müsste funktionieren

  • Ich will euch mal die Funktion _WinAPI_SetLayeredWindowAttributes vorschlagen um das Fenster schön transparent zu kommen. Und die Symbolschrift Wingdings für so einfache Sachen wie Pfeiltasten ;)

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)
    Global $aButton[5]

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

    $gui = GUICreate("Pfeiltasten", 60, 60, -1, -1, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_LAYERED, $WS_EX_TOPMOST))
    GUISetBkColor(0xFF0000)
    GUISetOnEvent(-3, "_Quit")
    _WinAPI_SetLayeredWindowAttributes($gui, 0xFF0000)

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

    GUISetFont(14, 400, 0, "Wingdings")

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

    $lbl = GUICtrlCreateLabel("l", 20, 20, 20, 20, $SS_CENTER, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetTip($lbl ,"Rechtsklick zum Beenden" & @CRLF & "© ProgAndy 2010")
    GUICtrlSetCursor($lbl, 9)
    $menu = GUICtrlCreateContextMenu($lbl)
    GUICtrlCreateMenuItem("Be&enden", $menu)
    GUICtrlSetOnEvent(-1, "_Quit")
    GUICtrlCreateMenuItem("© ProgAndy 2010", $menu)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Dim $asButton[4][5] = [ _
    [GUICtrlCreateLabel("á", 20, 0, 20, 20, $SS_CENTER, $GUI_WS_EX_PARENTDRAG ), "á", "é", '26'], _ ;oben
    [GUICtrlCreateLabel("â", 20, 40, 20, 20, $SS_CENTER, $GUI_WS_EX_PARENTDRAG ), "â", "ê", '28'], _ ;unten
    [GUICtrlCreateLabel("ß", 0, 20, 20, 20, $SS_CENTER, $GUI_WS_EX_PARENTDRAG ), "ß", "ç", '25'], _ ;links
    [GUICtrlCreateLabel("à", 40, 20, 20, 20, $SS_CENTER, $GUI_WS_EX_PARENTDRAG ), "à", "è", '27'] _ ;rechts
    ]

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

    GUISetState(@SW_SHOW)

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

    $dll = DllOpen("user32.dll")

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

    While 1
    Sleep(10)
    For $i = 0 To 3
    $p = _IsPressed($asButton[$i][3], $dll)
    If $p And Not $asButton[$i][4] Then
    $asButton[$i][4] = True
    GUICtrlSetData($asButton[$i][0], $asButton[$i][2])
    GUICtrlSetColor($asButton[$i][0], 0x0000FF)
    ElseIf Not $p And $asButton[$i][4] Then
    $asButton[$i][4] = False
    GUICtrlSetData($asButton[$i][0], $asButton[$i][1])
    GUICtrlSetColor($asButton[$i][0], 0x000000)
    EndIf
    Next
    WEnd

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

    Func _Quit()
    Exit
    EndFunc

    [/autoit]
  • echt geil, wenn man das so schreiben darf :D

    thx vielmals progandy

    Kann man die Pfeiltasten noch irgendwie dicker und fetter machen? :huh:

    Einmal editiert, zuletzt von Daniel35 (7. April 2010 um 23:42)

  • Du kannst die Schriftgröße verändern. Dann musst du aber auch die Größe der einzelnen Labels 20x20 auf einen höheren Wert stellen.
    Oder du verwendest Bilder anstatt den Symbolen.