Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

Przytrzymanie przycisku na klawiaturze


verssusspl

Pytanie

Opublikowano

pozornie proste zagadnienie.
możne ktoś mi wskazać funkcje która jest wstanie przytrzymać dowolna literę z klawiatury przez określony czas ??

od razu zaznaczam ze nie chodzi mi i spamowanie danego klawisza przez określony czas tylko go wciśniecie
może istnieje do tego jakiś UDF albo inna metoda ?? 
żeby uniknąć niedomówień zamieszczam mini kod który mierzy czas wciśniętej literki x

 

#Include <Misc.au3>
Local $Timer
Local $Pressed = False
HotKeySet("{F2}", "_xxx")

While 1
    If _IsPressed('58') Then ; bada czy litera x jest wcisnieta
        If $Pressed Then
            If TimerDiff($Timer) > 5000 Then
                Exit
            EndIf
        Else
            $Timer = TimerInit()
            $Pressed = 1
        EndIf
    Else
        If $Pressed Then
            ConsoleWrite(Round(TimerDiff($Timer) / 1000, 2) & ' seconds' & @CR) ; pokazuje w konsoli jak dlugo wymieniona litera jet wcisnieta
            $Pressed = 0
        EndIf
    EndIf
WEnd

Func _xxx()
	MouseDown("left")	; analogicznie do tego
	Sleep(2000)			; przykładu ale z
	MouseUp("left")		; literą z klawiatury
EndFunc

jakieś propozycje ??

dziekuje za uwage 😛

 

#Include <Misc.au3>
HotKeySet("{F2}", "_xxx")
HotKeySet("{F3}", "_Exit")

While 1
Sleep(10)
WEnd

Func _Sending($v_Send, $i_SendDownDelay = 2000, $i_Duration = 0)
    $OptSendDownDelay = Opt('SendKeyDownDelay', $i_SendDownDelay)
    Local $SendTimer = TimerInit()
    Do
        Send($v_Send)
    Until TimerDiff($SendTimer) >= $i_Duration
    Opt('SendKeyDownDelay', $OptSendDownDelay)
EndFunc

Func _xxx()
	_Sending('x',2000)
EndFunc

Func _exit()
Exit
EndFunc

zmodyfikowałem kod znaleziony w internecie

wydaje sie z mala roznica bo faktycznie jakby przytrzymuje wybrany klawisz tak dlugo jakk  zechce ale przykoadowo w notatniku to przez te 2 sekundy jak jest wcisniety x to wpisuje sie tylko jeden x 
ale to za sprawka SendKeyDownDelay

 

dodatkowo mozna wywolac funkcje _Sending('x',0, 2000) ktora poprostu spammuje dany klawisz 

dodatkowo dodatkowo jako ciekawostka to send("x") nie jest wykrywana przez _IsPressed('58')

2 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

Send nie jest "wykrywalny" przez _IsPressed, ponieważ to wypisuje tylko na ekran, nie symuluje nacisnięcia klawisza.
Pętla z odpowiednim delayem? kiedy już uznasz, że za długo to przerywasz

Opublikowano

Nie jest prawdą, że Send nie jest wykrywany przez _IsPressed. Owszem, nie działa samopowtarzanie klawisza, ale sam klawisz jest wciśnięty, a nie "wypisuje tylko na ekran".

I jest to jak najbardziej wykrywane przez _iSPressed!!!

Oto kod skryptu mierzącego czas takiego wirtualnego przytrzymania klawisza X:

#Include <Misc.au3>

HotKeySet("{F2}", "_XSendDown")
HotKeySet("{F3}", "_XSendUp")
HotKeySet("{ESC}", "_End")

Local $iTimer, $fPressed = False

While 1
    If _IsPressed('58') Then ; bada czy litera x jest wcisnieta
        If Not $fPressed Then
            $iTimer = TimerInit()
            $fPressed = True
        EndIf
    Else
        If $fPressed Then
            ConsoleWrite(Round(TimerDiff($iTimer) / 1000, 2) & ' seconds' & @CR) ; pokazuje w konsoli jak dlugo wymieniona litera jet wcisnieta
            $fPressed = False
        EndIf
    EndIf
WEnd


;---------------------------------------------------------------------
Func _XSendDown()  ;wciśnięcie klawisza X
	Send("{x DOWN}")
EndFunc


Func _XSendUp()   ;zwolnienia klawisza X
	Send("{x UP}")
EndFunc


Func _End()   ;zakończenie skryptu
	Exit
EndFunc

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...