_ispressed zu lange erkannt?

  • hallo zusammen. ich bin neugierig darüber, wie oft ich die linke maustaste in einer gewissen zeit benutze (tag/stunde/minute/....) ich hab bereits rausgefunden,dass ich dafür _ispressed benötige.

    hier der code:

    [autoit]

    $x = 0
    #Include <Misc.au3>
    HotKeySet("{ESC}", "Terminate")

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

    While 1
    If _ispressed(01) = 1 Then $x = $x+1
    WEnd

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

    Func Terminate()
    MsgBox(4096, "Mausclicks", $x)
    Exit
    EndFunc

    [/autoit]

    das problem: halte ich die maustaste länger gedrückt (1 sekunde beim markieren z.b.) wird 1 click bis zu 1000 clicks gezählt oder noch mehr. mit sleep(200) hab ich es schon probiert, ist aber "sinnlos" da ich auch mal stellen markiere und länger halte, aber auch schneller als 0,2 sekunden klicke (kommt vor)

    Einmal editiert, zuletzt von CryThis (26. November 2010 um 09:46)

  • Rein von der Logik her musst du quasi überprüfen ob die Maus zwischendurch auch wieder losgelassen wurde (mal ganz einfach gesagt^^)

    Im Script würde das z.B. so aussehn:

    [autoit]

    #include <Misc.au3>
    HotKeySet("{ESC}", "Terminate")

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

    Global $x = 0

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

    While 1
    While not _IsPressed(01)
    Sleep(10)
    WEnd
    $x = $x + 1
    While _IsPressed(01)
    Sleep(10)
    WEnd
    WEnd

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

    Func Terminate()
    MsgBox(4096, "Mausclicks", $x)
    Exit
    EndFunc

    [/autoit]

    edit das war gerade etwas müll :D

  • Hallo CryThis,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und jetzt zu deinem Problem: dein Skript läuft bei mir nicht, Ausgabe in Sciteconsole:

    Code
    entfernt, da Fehler durch fehlerhaftes kopieren meinerseits aufgetreten

    ich frage mich also, wie du dieses Problem erkannt hast:

    Zitat von CryThis


    solange ich meine maus drücke zählt er für x immer mehr dazu (1 click werden manchmal bis zu 1000 clicks "gezählt"


    du solltest schon dein Original-Skript bzw. ein lauffähiges Beispiel einstellen beim dem das Problem auftritt,

    Ps.: warum machst du dein Thema doppelt auf?

    mfg autoBert

    2 Mal editiert, zuletzt von autoBert (25. November 2010 um 17:37)

  • Damit _isPressed nicht die ganze Zeit denkt es wird gedrückt, bzw _isPressed aus deiner Sicht zu lange erkannt, musst du die While Schleife langsamer laufen lassen. Du berprüfst dann bei denem Mal ob es gedrückt ist und das "jedes Mal" ist sehr schnell^^. (10 Millisekunden Abstand)

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • (sorry xD war mein fehler mitm doppelpost)
    ähm das ist mein original script. das funktioniert 1 zu 1. und es läuft, kann ich versichern^^
    wenn er die schleife langsamer durchlaufen lässt (z.b. 1 sekunde) kann es ja sein dass ich immernoch die maus gedrückt halte (z.b. beim markieren)
    danke schnitzel, läuft astrein, kapier leider noch net ganz wie du das gemacht hast, also werd ich bissl rumgrübeln müssen.
    nun muss ich nur noch rausfinden wie ich das evtl in net txt datei abspeicher und den x wert beim neustart des pcs übernehme (werd ich schon iwie schaffen, ansonsten google oder forum hilft mir ja^^)

  • kein ding ^^ werd dasselbe jetzt auch für tasten machen. ist mal interessant zu wissen

    p.s. das mit der variable abspeichern / auslesen hab ich schon super hinbekommen, das forum hier taugts echt (jaja die ini dateien xD)

  • Schnitzel, ich würde es so machen:

    [autoit]


    #include <Misc.au3>
    HotKeySet("{ESC}", "Terminate")

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

    Global $x = 0

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

    While 1
    If _IsPressed(01) Then
    $x = $x + 1
    Do
    Sleep(50)
    Until Not _IsPressed(01)
    EndIf
    Sleep(20)
    WEnd

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

    Func Terminate()
    MsgBox(4096, "Mausklicks", $x)
    Exit
    EndFunc

    [/autoit]
  • soo und ein weiteres mal brauch ich eure hilfe. ich hab bei den mausclicks jetzt nur die linke taste mit eingebunden...nun brauch ich aber auch die rechte(dass mir das jetzt erst einfällt ist ziemlich dumm). da ich mittlerweile die lösung von schnitzel verstanden hab, und diese darauf basiert das vom übergang von not ispressed zu ispressed ein click gezählt wird ist es meiner ansicht nach nicht möglich die rechte dazuzufügen (hab vieles ausprobiert). ist es iwie möglich mit "while .... or while ...." die gemeinsam ein WEnd benutzen,oder geht das überhaupt? ansonsten hab ich halt dasselbe problem wie davor: der rechtsklick wird zu lange.."gewertet"

    edit: sorry. erst jetzt den beitrag von pinguin gesehen. danke dir, so ist es optimal :D
    p.s. schnuffel? oO

  • soo und ein weiteres mal brauch ich eure hilfe. ich hab bei den mausclicks jetzt nur die linke taste mit eingebunden...nun brauch ich aber auch die rechte(dass mir das jetzt erst einfällt ist ziemlich dumm). da ich mittlerweile die lösung von schnitzel verstanden hab, und diese darauf basiert das vom übergang von not ispressed zu ispressed ein click gezählt wird ist es meiner ansicht nach nicht möglich die rechte dazuzufügen (hab vieles ausprobiert). ist es iwie möglich mit "while .... or while ...." die gemeinsam ein WEnd benutzen,oder geht das überhaupt? ansonsten hab ich halt dasselbe problem wie davor: der rechtsklick wird zu lange.."gewertet"

    [autoit]

    #include <Misc.au3>
    HotKeySet("{ESC}", "Terminate")

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

    Global $x = 0, $y = 0

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

    While 1
    If _IsPressed(01) Then
    $x = $x + 1
    Do
    Sleep(50)
    Until Not _IsPressed(01)
    EndIf
    If _IsPressed(02) Then
    $y = $y + 1
    Do
    Sleep(50)
    Until Not _IsPressed(02)
    EndIf
    Sleep(20)
    WEnd

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

    Func Terminate()
    MsgBox(4096, "Mausklicks", $x & " " & $y)
    Exit
    EndFunc

    [/autoit]

    €: geht sicherlich auch leichter, aber habs hier in der Schnellantwort geschrieben :D

    €:

    Zitat

    p.s. schnuffel? oO

    Ja ich verwechsel Schnuffel und Schnitzel immer. Wir haben auch einen Schnuffel im forum :D

  • okay. danke schonmal für alles. jetzt kommt aber nen fehler den ich mir nicht erklären kann.ich hab das nun mit tasten fortgesetzt und er erkennt _ispressed(0D) nicht...wegen dem D nehme ich an, obwohl es doch in der autoit hilfe steht? (hex code ist ja nunmal von 0-9 und A-F)

    hier mal 2 kurze teile aus meim script nun:

    [autoit]

    If _IsPressed(0D) Then
    $enter = $enter + 1
    Do
    Sleep(50)
    Until Not _IsPressed(0D)

    [/autoit]

    und

    [autoit]

    If _IsPressed(4E) Then
    $n = $n + 1
    Do
    Sleep(50)
    Until Not _IsPressed(4E)
    EndIf

    [/autoit]

    dabei ist das 4E lila und bei 0D nur die 0 lila und das D normal schwarz...grund? funktioniert außerdem bei keinem buchstaben, außer E

  • Kleiner Tipp:
    _IsPressed("Value")

    Falls du das ganze auf viele Keys ausweiten willst, bzw Kombinationen haben willst
    aus Mausklicks, und co ohne zich _IsPressed() oder HotKeySets (Werbung :P):

    Spoiler anzeigen
    [autoit]


    #include <Timers.au3> ;Testing only

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

    ; #=================================================================================================#
    ; Name...........: _GetHexPressed() - Speed Example
    ; #=================================================================================================#
    $Timer = _Timer_Init()
    $Keys = _GetHexPressed(0)
    ConsoleWrite("_GetHexPressed() - String Output - Timer: " & _Timer_Diff($Timer) & @CRLF)
    $Timer = _Timer_Init()
    $Keys = _GetHexPressed(1)
    ConsoleWrite("_GetHexPressed() - Array Output - Timer: " & _Timer_Diff($Timer) & @CRLF)

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

    ; #=================================================================================================#
    ; Name...........: _GetHexPressed() - Loop Example
    ; #=================================================================================================#
    While 1
    Switch _GetHexPressed(0)
    Case "11-12-2E-A2-A4" ;Strg/Alt/Entf
    ConsoleWrite("Tastmanager - Strg+Alt+Entf - 11-12-2E-A2-A4" & @CRLF)
    Case "10-41-42-A0" ;Shift+A+B
    ConsoleWrite("Shift+A+B - 10-41-42-A0" & @CRLF)
    Case "01-43" ; LeftMouse+C
    ConsoleWrite("LeftMouse+C - 01-43" & @CRLF)
    Case "01-10-11-A0-A2" ;Strg+Shift+LeftMouse
    ConsoleWrite("Strg+Shift+LeftMouse - 01-10-11-A0-A2" & @CRLF)
    EndSwitch
    Sleep(50)
    WEnd

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

    ; #=================================================================================================#
    ; Name...........: _GetHexPressed()
    ; Author ........: Sen // Christopher Klay
    ; Description ...: Returns a String / Array with the Hex Keys pressed
    ; Syntax.........: _GetHexPressed($Mode)
    ; Parameters ....: $Mode - 0 = String, 1 = Array (0 = Count)
    ; Return values .: $Mode = 0 -> String, based on "Value-Value-Value"
    ; $Mode = 1 -> Array, based on 0 = Size / 1+ = Hexkeys
    ; No Keys = 0
    ; #=================================================================================================#
    Func _GetHexPressed($Mode = 0)
    Dim $Keys[16] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F"]
    Local $aCom[(UBound($Keys) ^ 2)]
    Local $i, $j, $k
    For $i = 0 To UBound($Keys) - 1
    For $j = 0 To UBound($Keys) - 1
    $aCom[$k] = $Keys[$i] & $Keys[$j]
    $k += 1
    Next
    Next
    Local $Return = ""
    Local $ReturnC = 0
    Local $user32 = DllOpen("user32.dll")
    For $i = 0 To UBound($aCom) - 1
    Local $a_R = DllCall($user32, "short", "GetAsyncKeyState", "int", '0x' & $aCom[$i])
    If @error Then Return SetError(@error, @extended, False)
    If BitAND($a_R[0], 0x8000) <> 0 Then
    $Return &= $aCom[$i] & "-"
    EndIf
    Next
    If $Return = 0 Then
    Return 0
    EndIf
    $Return = StringTrimRight($Return, 1)
    DllClose($user32)
    Switch $Mode
    Case 0
    Return $Return
    Case 1
    $Return = StringSplit($Return, "-", 1)
    Return $Return
    EndSwitch
    EndFunc ;==>_GetHexPressed

    [/autoit]
  • ich hab schon 30x ispressed gemacht :P also, kann man das iwie mit 0D machen, weil autoit unterstützt das doch eig?!