Einige Fragen...

  • Im laufe des Tages haben sich bei mir einige Fragen gesammelt. Ich hoffe, ihr könnt die beantworten: :)
    1. Wie kann man HotKeySet aufheben? Da das ein bisschen störend ist:

    [autoit]

    HotKeySet("a","a")
    Sleep(10000)
    Func a()
    MsgBox(0,"","Du hast 'a' gedrückt")
    Send("a")
    EndFunc

    [/autoit]


    2. Während ich ein GUI laufend habe soll das Programm jede Sekunde die Farbe eines Pixels auslesen, die Buttons sollen aber weiterhin funktionieren:

    [autoit]

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

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

    $Fenster = GUICreate("Fenster", 243, 119, 372, 194)
    $Button = GUICtrlCreateButton("Button", 64, 56, 75, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button
    MsgBox(0,"","Du hast den Button gedrückt")
    EndSwitch
    ;~ Sleep(1000)
    ;~ $Farbe=PixelGetColor(75,44)
    WEnd

    [/autoit]


    3. Und zu guter Letzt: Wie liest man aus, dass der Slider bewegt wird. Also wie man den ausliest wenn man einen Button klickt weiß ich, nur nicht wie das ohne Button funktioniert. (Lautstärkeregler)

    [autoit]

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

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

    $Fenster = GUICreate("Fenster", 152, 46, 456, 225)
    $Slider = GUICtrlCreateSlider(0, 0, 150, 45)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Danke im Vorraus für Antworten! :)

  • Also erst mal zur 1, den Rest editier ich vieleicht noch ^^ :

    1.

    Zitat

    Setzt einen HotKey, um eine selbsterstellte Funktion aufzurufen.

    HotKeySet ("key" [,"function"] )

    Parameter

    key Die Tastenkombination für den HotKey im gleichen Format wie Send().
    function [optional] Der Name der aufzurufenden Funktion. Wird der Parameter nicht angegeben, wird der vorher gesetzte HotKey gelöscht.

    Edit:
    zur 2:
    AdlibEnable z.B. nehmen:

    Spoiler anzeigen
    [autoit]

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

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

    $Fenster = GUICreate("Fenster", 243, 119, 372, 194)
    $Button = GUICtrlCreateButton("Button", 64, 56, 75, 25, 0)
    GUISetState(@SW_SHOW)

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

    AdlibEnable("_farbe",1000) ; 1000 = wird jede sekunde aufgerufen, benötigt keine schleife!

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button
    MsgBox(0,"","Du hast den Button gedrückt")
    EndSwitch
    WEnd

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

    Func _farbe()
    $Farbe=PixelGetColor(75,44)
    EndFunc

    [/autoit]

    Edit 3:
    sooo,
    und zur 3 ^^ :

    Spoiler anzeigen
    [autoit]

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

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

    $Fenster = GUICreate("Fenster", 152, 46, 456, 225)
    $Slider = GUICtrlCreateSlider(0, 0, 150, 45)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Slider
    MsgBox(0,"Da fummelt jemand am Slider rum!","Wert wurde geändert auf "& GUICtrlRead($Slider))
    EndSwitch
    WEnd

    [/autoit]

    Hoffe konnte dir helfen ;)
    Gruss Greek

    Einmal editiert, zuletzt von Greek (20. Oktober 2009 um 20:24)

  • zu 2.
    schau Dir mal die Funktion AdlibEnable() in der Hilfe an.

    zu 3.

    Spoiler anzeigen
    [autoit]

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

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

    $Fenster = GUICreate("Fenster", 152, 46, 456, 225)
    $Slider = GUICtrlCreateSlider(0, 0, 150, 45)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Slider
    MsgBox(0, '', GUICtrlRead($Slider) )
    EndSwitch
    WEnd

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hmm ich glaube nicht - aber ich habe adlibenable noch nie benutzt - mir fehlte bisher einfach die Situation in der ich es als nützlich empfunden hätte. Du kannst aber wenn ich mich nicht irre einfach deine GUI in den OnEventModus setzen - und dann in der While Schleife mit hilfe von TimerInit() und TimerDiff() jede Sekunde den Pixel scannen. So kannst du auch noch weitere "zeitgesteuerte" Funktionen einbauen . Ich hoffe ich drücke mich nicht zu kompliziert aus. Ich versuche dir mal ein beispiel zu basteln aber so wie ich mich kenne wird das 10-20 min dauern ^^

    EDIT:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <SliderConstants.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode",1)
    $Fenster = GUICreate("Fenster", 152, 46, 456, 225)
    $Slider = GUICtrlCreateSlider(0, 0, 150, 45)
    GUICtrlSetOnEvent($Slider, "_SliderMoved")

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

    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE,"_Stirb")

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

    #Region Funktionen
    Func _Stirb()
    Exit
    EndFunc
    Func _SliderMoved()
    MsgBox(0,"Pass auf!","Irgend so ein Typ fuchtelt mit dem Slider rum !")
    EndFunc
    #EndRegion
    ;-->
    $tColor = TimerInit();Startet den Timer für die Farbüberprüfung
    $tTrayTip = TimerInit();Startet den Timer für den traytip (alle 10 sekunden kommt eine)
    $TrayTip_sekunden = 0
    $Farbe = Hex(PixelGetColor(MouseGetPos(0),MouseGetPos(1)))
    While 1
    ToolTip($Farbe,MouseGetPos(0),MouseGetPos(1))

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

    If TimerDiff($tColor) > 1000 Then
    $Farbe = Hex(PixelGetColor(MouseGetPos(0),MouseGetPos(1)))
    $tColor = TimerInit() ; Startet den Timer neu
    EndIf
    If TimerDiff($tTrayTip) > 10000 Then
    $TrayTip_sekunden += 10
    TrayTip("",$TrayTip_sekunden&" sekunden sind vergangen.",1)
    $tTrayTip = TimerInit() ; Startet den Timer neu
    EndIf
    Sleep(1)
    WEnd

    [/autoit]

    Alle 10 sekunden kommt jetzt der TrayTip
    Und jede Sekunde fragt er die Farbe unter dem mauscursor ab
    (die wird in dem ToolTip neben der Maus gezeigt)
    Und das mit dem Slider funktioniert im OnEvent mode natürlich die ganze Zeit ;)

    EDIT2: Alternativ zu "GUICtrlSetOnEvent($Slider, "_SliderMoved")" in Zeile 7 kannst du auch
    GUICtrlSetOnEvent(-1, "_SliderMoved") benutzen. -1 steht dann immer für das zuletzt erschaffene Objekt
    EDIT3: Codekorrektur - Zeile 34 und 35 getauscht. jetzt ists richtig

    • Offizieller Beitrag

    Mit der aktuellen Stable-Version geht nur einmal AdlibEnable. Ab der Version 3.3.1.0 Beta gibt es AdlibRegister, womit man auch mehrere Funktionen zeitgesteuert aufrufen kann.
    Als Alternative gibt es noch die _Timer-UDF (auch schon in der Stable), die ebenfalls mehrere zeitgesteuerte Funktionsaufrufe ermöglicht.