Mausklicklänge bestimmen

  • Hallo Liebe AutoIt-Freunde,

    ich frag mich ob es eine Möglichkeit gibt das klicken eines Mausklicks zu bestimmen?
    hab arbeite in meinem Script mit ControlClick() jedoch würde ich gern die Länge des Mausklicks bestimmen. lieber wäre es mir das die Maustaste (Linksklick) so lange gedrückt wird bis ein Ereignis eintritt.. geht so was?

    danke schon mal im voraus

    LG Inferior

    Einmal editiert, zuletzt von Inferior (12. September 2011 um 22:01)

  • das glaube ich nicht aber wenn dein ereignis ein neues fenster ist

    WinWaitActive WinExists dann mouseclick wenn du die positton kennst

    bei einen fenster ControlClick

    Einmal editiert, zuletzt von sillyboy (10. September 2011 um 20:18)

  • ja arbeite schon mit MouseDown() und MouseUp() allerdings lässt sich der klick nicht überall bestimmen da ich eig kontrollklick bräuchte..

    naja zumindest klappt das mit der länge des klicks.. jedoch möchte ich nun nicht ein sleep einbauen sondern so lange drücken bis er mit pixelgetcolor() eine bestimmte farbe auf einem bestimmten feld ausließt wie funktioniert das?

    hier mein bisheriges script:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEX.au3>

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

    Opt("WinTitleMatchMode", 2)

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

    $Main = GUICreate("test", 350, 250)
    $start = GUICtrlCreateButton("Start", 50, 50, 250, 150)

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

    GUISetState()

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

    While 1
    $Main = GUIGetMsg()
    Switch $Main
    Case $GUI_EVENT_CLOSE
    Exit
    Case $start
    WinActivate('test - Mozilla Firefox', "")
    ;$klick = ControlClick("Mozilla", "", "[CLASS:GeckoPluginWindow; INSTANCE:2]", "left", 1, 70, 330)

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

    MouseMove(405, 815)
    MouseDown("left")

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

    While 1
    $color = PixelGetColor(336, 353)
    If Hex($color, 6) = 0xFFFFCC Then
    MouseUp("left")
    ExitLoop
    EndIf
    WEnd

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

    EndSwitch
    WEnd

    [/autoit]
  • Die Länge eines Mausklicks lässt sich so bestimmen:

    [autoit]

    #include <Misc.au3>
    While 1
    If _IsPressed("01") Then
    $Timer = TimerInit()
    While _IsPressed("01")
    $Diff = TimerDiff($Timer)
    WEnd
    ConsoleWrite("Maus war für "&Round($Diff/1000, 4)&" Sekunden gedrückt"&@CRLF)
    EndIf
    WEnd

    [/autoit]

    Einstellen wie lange die Maus gedrückt wird geht so:

    [autoit]

    Func _MouseClick($Seconds)
    $Time = $Seconds * 1000
    $Timer = TimerInit()
    MouseDown()
    Do
    Until TimerDiff($Timer)/1000 > $Seconds
    MouseUp()
    EndFunc

    [/autoit]

    Bis zu einer bestimmten Farbe:

    [autoit]

    Func _MouseUntilColorMatch($X = 336, $Y = 353, $Color = 0xFFFFCC)
    MouseDown()
    Do
    Until PixelGetColor($X, $Y) = $Color
    MouseUp()
    EndFunc

    [/autoit]
  • Zitat

    name22: Stimmt, das würde funktionieren, aber dadurch ist es schwierig, die Klicklänge auf ein Event anzupassen...


    Daran habe ich nicht gedacht... Falls das mit MouseDown/Up und PixelSearch keine Lösung ist, dann könnte man mit _SendMessage experimentieren. Wobei das um einiges komplizierter ist.

  • vielen dank für eure antworten und für euer bemühen.

    ich hab eine lösung gefunden die den zweck ansich erfüllt.
    habe dabei mit MouseDown() und MouseUp() gearbeitet.
    wollte eigentlich die klicks mit hilfe von ControlClick() genauer machen aber es funktioniert für meinen zweck.
    hier mein Script falls es wem interessiert:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEX.au3>

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

    $Main = GUICreate("test", 220, 100, 895, 585)
    $start = GUICtrlCreateButton("Start", 10, 10, 200, 80)

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

    GUISetState()

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

    While 1
    $GUI = GUIGetMsg()
    Switch $GUI
    Case $GUI_EVENT_CLOSE
    Exit
    Case $start
    MouseMove(405, 815, 0) ;führt die Maus zur gewünschten Position
    MouseDown("left") ;Drückt die Maus (linksklick)
    Sleep(50)
    $color = PixelGetColor(435, 665) ;ermittelt die aktuelle Farbe des Pixel von Interesse

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

    While 1 ;While-Schleife so lange bis
    If PixelGetColor(435, 665) <> $color Then ; Pixel von Interesse andere Farbe hat als zuvor ermittelt
    MouseUp("left") ;dann Mausklick wird beendet
    ExitLoop ;verlassen der schleife
    EndIf
    WEnd
    EndSwitch
    WEnd

    [/autoit]

    lg Inferior