Autohotkey Keywait pour qu'une des 2 clés soit relâchée

0

Dans Autohotkey, je sais que vous pouvez utiliser "KeyWait" pour attendre qu'une touche soit enfoncée ou relâchée, mais que puis-je faire si je veux pouvoir attendre qu'une des deux touches soit relâchée?

J'ai trouvé ceci sur le Web, mais c'est quand vous voulez attendre que l'on appuie sur l'une des deux touches

LButton & XButton1::
Keywait, r
Keywait, LAlt
SendInput {ShiftDown}
SendInput {v Down}
SendInput {v Up}
SendInput {Shift Up}

Input, UserInput,v,{LButton}{XButton1}
;v is if you want input to be visible
if ErrorLevel=EndKey:LButton
{
    theFunctionIrunAlltheTime()
    Return
}
else if ErrorLevel=EndKey:XButton1
{
    theFunctionIrunAlltheTime()
    Return
}

Peu importe lequel de ces boutons est celui que je souhaite utiliser, je pense que l'exemple ci-dessus ne fonctionne qu'avec des lettres, pas avec des boutons, mais l'important est que lorsque vous exécutez le script, LButton n XButton1 est déjà enfoncé. et je veux au milieu du sous-programme pour détecter quand l'un d'entre eux est publié, une idée s'il vous plaît ??? merci adavanced.

litu16
la source

Réponses:

0

Essayez aussi ceci:

~LButton & XButton1::
SetTimer detect_key_released, 50
; do sth
return

    detect_key_released:
If !GetKeyState("LButton", "P")
{
    SetTimer detect_key_released, off
    MsgBox LButton released
    return
}
If !GetKeyState("XButton1", "P")
{
    SetTimer detect_key_released, off
    MsgBox XButton1 released
    return
}
return
user3419297
la source
oui cela a fonctionné, mais mieux, pourriez-vous vérifier ceci ?? superuser.com/questions/1177548/…
litu16
1

Essayez d'ajouter KeyWait au code ci-dessus:

F4::
Input, UserInput,v,{enter}{tab} ;v is if you want input to be visible
if ErrorLevel=EndKey:Tab 
{
    KeyWait, Tab, L
    Msgbox Tab key was pressed
}
else
if ErrorLevel=EndKey:Enter 
 {
    KeyWait, Enter, L
    Msgbox Enter key was pressed
}
; ExitApp
return
user3419297
la source
Bonjour user3419297, je voudrais attendre soit pour le LButton ou XButton1 être libéré, le problème est qu'au moment où le Input la ligne est atteinte, à la fois LButton et XButton1 sont déjà maintenus, donc je voudrais attendre qu'ils soient libérés, seulement libérés, pas pressés à nouveau n libérés. Je ne peux plus les appuyer et les relâcher, car cela gâcherait le but des sous-routines de trous, parce que c'est un clic-glisser. Une idée s'il vous plaît? merci avancé.
litu16
PD: pourriez-vous s'il vous plaît voir aussi mon autre question ici superuser.com/questions/1177548/… merci avancé.
litu16
Et si au lieu de {entrer} {tab} Je veux attendre que "b" ou "v" soit pressé, j'ai essayé Input, UserInput,v,{b}{v} if ErrorLevel=EndKey:b sans succès, aidez quelqu'un s'il vous plaît, merci avancé.
litu16
Le code fonctionne également avec "b" et "v". Vous pouvez également définir "b" et "v" en tant que touches de raccourci contextuelles. Voir ma prochaine réponse.
user3419297
1
While GetKeyState("LButton") && GetKeyState("XButton1")
    Sleep 10

; msg to user assumes only one or the other was released...
MsgBox % (GetKeyState("LButton") ? "XButton1" : "LButton") " Released"
JJohnston2
la source
merci JJohnston2, n'est-il pas possible de le faire en utilisant une boucle non? d'ailleurs pourriez-vous s'il vous plaît jeter un oeil à cette question? merci avancé. superuser.com/questions/1177548/…
litu16
1

Vous pouvez également définir les 2 clés comme touches de raccourci contextuelles:

; define a variable in a hotkey:
F4:: key_pressed := true

#If (key_pressed)   ; If the value of the variable "key_pressed" is 1 (true)

    $b up:: 
    key_pressed := false
    Msgbox b key was pressed
    return

    $v up::
    key_pressed := false
    Msgbox v key was pressed
    return

#If

https://autohotkey.com/docs/commands/_If.htm

user3419297
la source
Bonjour user3419297, Mais je suis déjà au milieu d'un sous-programme lorsque je veux mettre en attente une touche pour que l'une de ces clés soit libérée. S'il vous plaît jeter un oeil à ma question édité. Merci Advanced., Oh s'il vous plaît pourriez-vous également jeter un coup d'oeil à cela? superuser.com/questions/1177548/… Encore merci.
litu16