Page 1 of 1

warten bis keine Taste (mehr) gedrückt ist

Posted: 18 Aug 2022, 08:38
by Gerdi
wenn eine der folgenden Schreibweisen
KeyWait oder KeyWait,* oder KeyWait, [Beliebige_Taste]
so lange warten würde bis keine Taste gedrückt ist, dann wäre dieser Topic beantwortet.

Kennt jemand einen funktionierenden KeyWait oder sonstige Befehle, die ohne lange Tastenlisten auskommen (und dabei letztendlich doch nicht alle Tasten berücksichtigt zu haben)?

Wenn keine Taste gedrückt ist, soll es sofort weiter gehen, ansonsten soll gewartet werden bis die letzte Taste losgelassen wurde.

Mause- oder JoyStick-Tasten zu berücksichtigen ist nicht zwingend.

Re: warten bis keine Taste (mehr) gedrückt ist

Posted: 18 Aug 2022, 08:56
by BoBo

Re: warten bis keine Taste (mehr) gedrückt ist

Posted: 18 Aug 2022, 10:20
by Gerdi
Danke BoBo, vermutlich werde ich es mit einer Timeidle Variablen realisieren müssen. Da ist aber noch das offene Problem, wenn eine dauergedrückte Taste, weil sich nichts verändert, von TimeIdle nicht mehr bemerkt wird. Die Tasten mit Tastatur-Repeat sollten davon nicht betroffen sein, aber wie ist es mit den umschalt-Tasten, wie bspw. Shift oder Ctrl ? Die 2 Letzteren haben bei mir einen Repeat. Vermutlich haben ihn auch die Anderen, sodass meine Sorge unbegründet sein wird. Die Gefahr von aus geschaltenem Tastatur-Repeat wird wohl auch verschwindend gering sein.

Re: warten bis keine Taste (mehr) gedrückt ist

Posted: 19 Aug 2022, 04:15
by Rohwedder
Hallo,
versuch es mal hiermit:

Code: Select all

#InstallKeybdHook
#InstallMouseHook
q::
While, KC := KeyCombination()
	ToolTip,% KC
ToolTip
ComObjCreate("SAPI.SpVoice").Speak("keine Taste mehr gedrückt")
Return

KeyCombination(ExcludeKeys:="")
{ ;All pressed keys and buttons will be listed
    ExcludeKeys .= "{Shift}{Control}{Alt}{WheelUp}{WheelDown}"
    Loop, 0xFF
    {
        IF !GetKeyState(Key:=Format("VK{:02X}",0x100-A_Index),"P")
            Continue
        If !InStr(ExcludeKeys,Key:="{" GetKeyName(Key) "}")
            KeyCombination .= RegexReplace(Key,"Numpad(\D+)","$1")
    }
    Return, KeyCombination
}
oder ohne Schnickschnack:

Code: Select all

#InstallKeybdHook
#InstallMouseHook
q::
While, Taste_gedrückt()
	Continue
Return

Taste_gedrückt()
{
	Loop, 0xFF
		IF GetKeyState(Key:=Format("VK{:02X}",A_Index),"P")
			Return, True
	Return, False
}

Re: warten bis keine Taste (mehr) gedrückt ist

Posted: 19 Aug 2022, 08:18
by Gerdi
Danke Rohwedder,
das sieht gut aus, habe allerdings noch Herausforderungen beim Einbau in mein Skript.
Ich melde mich gegebenenfalls mit Details.