2012-02-21 1 views
0

Comment simuler une touche (ctrl) maintenue enfoncée alors qu'un autre code est exécuté? Quelle serait la mise en œuvre de la méthode suivante?Simulation de l'événement keydown

self ctrlDownWhile: [self doSomething] 
+0

désolé - moi stupide - commentaire supprimé. – blabla999

Répondre

1

Vous pouvez essayer de "tromper" l'état d'entrée en modifiant son état "ctrlDown". Les mauvaises nouvelles est qu'il ne dispose pas d'un setter méthode pour y accéder (peut-être que dans ma version), donc vous pouvez avoir à y arriver avec un truc:

ctrlDownWhile:aBlock 
    "aBlock will see ctrlDown as true" 

    |indexOfCtrlState| 

    indexOfCtrlState := InputState allInstVarNames indexOf:'ctrlState'. 

    InputState default instVarAt:indexOfCtrlState put:1. 
    aBlock 
    ensure: [ 
     InputState default instVarAt:indexOfCtrlState put:0. 
    ]. 

une alternative est de créer keyPress & keyRelease-events pour la clé CTRL, et mettez-les dans le WindowSensor, avant et après l'évaluation du bloc.

+0

bien sûr, vous pouvez ajouter ceci comme une extension à InputState; alors il n'est pas nécessaire de jouer avec instvar-offsets. – blabla999

+0

aussi, le ci-dessus n'est pas enregistrer le fil, donc mieux essayer l'alternative fenêtre-capteur ... – blabla999