Pregunta

¿Cómo puedo simular una clave (CTRL) que se mantenga presionada mientras se ejecuta algún otro código? ¿Cuál sería la implementación del siguiente método?

self ctrlDownWhile: [self doSomething]
¿Fue útil?

Solución

Podría intentar "engañar" al estado de entrada, cambiando su estado "Ctrldown". La mala noticia es que no tiene un método setter para acceder (tal vez solo en mi versión), por lo que es posible que tenga que llegar allí con un truco:

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.
    ].

Una alternativa es crear KeyPress & KeyRelease-Events para la tecla CTRL, y enquearlos en Windowsensor, antes y después de la evaluación del bloque.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top