Bug bei verwenden der Shift Taste

  • [autoit][/autoit]
    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>

    $dll = DllOpen("user32.dll")

    While 1
    Sleep ( 250 )
    If _IsPressed("10", $dll) Then
    send ("{lshift}")
    EndIf
    WEnd
    DllClose($dll)

    [/autoit]
    [autoit][/autoit]

    Hallo testet das bitte mal aus drückt die rechte shift taste dann wird alles dauerhaft groß geschreiben

    Einmal editiert, zuletzt von XNeoX (21. Oktober 2008 um 13:44)

    • Offizieller Beitrag

    Hallo

    Und ne While Schleife :P
    Funktioniert aber trotzdem nicht:

    Mfg Spider

  • also schlicht nicht möglich?
    jetzt hab ich aber das problem das ich während ich ein script ausführe den fehler habe das so bald ich rshift und ne taste drück ab diesem zeitpunkt alles groß geschrieben wird...

  • hierbei tritt der gleiche fehler auf

    [autoit]

    #include <Misc.au3>

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

    $dll = DllOpen("user32.dll")

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

    While 1
    Sleep ( 250 )
    If _IsPressed("10", $dll) Then
    send ("{lshift}")
    ExitLoop
    EndIf
    WEnd
    DllClose($dll)

    [/autoit]
  • Hi,
    Naja, ich weis nicht was du machen willst, aber dein Script im letzten Post ist doch soweit ok.

    Das Script das du jetzt in den ersten Post editiert hast, ist klar, dass das nicht geht.

    Sobald du mit der Tastatur die Shifttaste drückst (Abfrage mit Ispressed) wird die Shifttaste gesendet. Dieses senden erkennt der Computer beim Abfragen mit Ispressed aber auch als Shift Taste und dadurch wird natürlich wieder Shift gedrückt, sodass du dir eine Perfekte Endlosschleife gebastelt hast. Du muss die richtigen Werte einsetzen, für rechte oder Linke Shifttaste.

  • der fehler ist das es bei betätigung der linken shift taste problemlos geht aber so bald ich rechtsshift + buchstabe drück gehts nimmer

  • Ja, ich hab dir ja auch erklärt, warum, aber ich weis nicht was du machen willst.
    Einfach mal erklären in Worten, was soll dein Programm können?
    Und was soll passieren usw...

  • das problem ist das ich ein programm geschrieben habe bei dem wenn ich die rechte shift taste drück alles groß geschrieben wird.
    diese problem will ich beheben in dem ich alle tatendrücke auf rshift auf linksshift umleite

  • warum wird in meinem scirpt dann alles groß geschrieben wenn ich shift rechts inklusive eines buchstabens drücke`?

  • Also ich nehme mal an du beziehst ich auf das Script am Threadanfang.

    Das hab ich dir doch schon erklärt, ich zitiere mich mal selber:

    Zitat

    Sobald du mit der Tastatur die0Rechte- Shifttaste drückst (Abfrage mit Ispressed) wird die Shifttaste gesendet. Dieses senden erkennt der Computer beim Abfragen mit Ispressed aber auch als Shift Taste und dadurch wird natürlich wieder Shift gedrückt, sodass du dir eine perfekte Endlosschleife gebastelt hast.

  • ^^ nein ich beziehe mich nicht auf das oben geschriebene programm stück sondern auf ein anderes programm von mir

  • Woher soll ich denn dann wissen, wo da der Fehler liegt?
    Aber wie wäre es wenn du den Fehler im Programm Korrigierst anstatt ein anderes Programm zu schreiben, dass dir den Fehler korrigieren soll, ich versteh den Sinn nicht.

  • weil ich es versucht habe aber die shift taste in diesem programm nicht als hokey oder als if pressed definiert ist

  • Der Hexcode 10 steht für irgendein schift (heißt links oder rechts is egal), wenn du jetz irgendein shift drückst wird wieder shift gesendet und das wiederrum von ispressed erkannt.
    Der Hex Für Rechts Shift ist: A1

  • morgen
    danke für deinen lösungsvorschlag aber starte das script mal es wird dir den gleichen fehler bringen wenn du rechtsshift drückst = D

    • Offizieller Beitrag

    Hi,
    so kannst du LeftShift und RightShift auseinanderhalten:

    [autoit]

    While 1
    Sleep(20)
    If _IsPressedAsync('A0') Then
    MsgBox(0, '', 'LeftShift')
    ElseIf _IsPressedAsync('A1') Then
    MsgBox(0, '', 'RightShift')
    ElseIf _IsPressedAsync('51') Then
    Exit
    EndIf
    WEnd

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

    Func _IsPressedAsync($sHexKey)
    Local $ret, $i
    For $i = 1 To 256
    $ret = DllCall("user32.dll", "int", "GetAsyncKeyState", "int", '0x' & Hex($i, 2))
    If $ret[0] <> 0 And Hex($i, 2) = $sHexKey Then Return True
    Next
    Return False
    EndFunc

    [/autoit]
  • Hallo Bugfix. Ich hatte gerade was ähnliches vor. Mit diesem Beispiel sieht man, dass die linke und die rechte Shifttaste vom Send-Befehl nicht so interpretiert werden, wie sie sollten.
    Es verhält sich sehr eigenartig, wenn man einen der Send-Befehle aktiviert, aber auch ohne sie zu aktivieren nur durch Tasten drücken wird auch manchmal der Ascii-Code 10 interpretiert.?

    [autoit]

    #Include <Misc.au3>
    While 1
    ;~ Send("{LSHIFT}")
    ;~ Send("{RSHIFT}")
    If _IsPressed("10") Then ToolTip("Allgemeine Shift-Taste wurde gesendet")
    If _IsPressed("A0") Then ToolTip("Linke Shift-Taste wurde gedrückt")
    If _IsPressed("A1") Then ToolTip("Rechte Shift-Taste wurde gedrückt")
    If _IsPressed("1B") Then ExitLoop
    WEnd

    [/autoit]