模拟keydown事件

时间:2012-02-21 11:33:16

标签: smalltalk keydown visualworks

如何在执行某些其他代码时模拟按住键(ctrl)?以下方法的实现是什么?

self ctrlDownWhile: [self doSomething]

1 个答案:

答案 0 :(得分:1)

您可以尝试通过更改其“ctrlDown”状态来“欺骗”输入状态。 坏消息是它没有setter方法来访问它(可能只在我的版本中),所以你可能必须通过一个技巧到达那里:

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

另一种方法是创建keyPress& CTRL键的keyRelease事件,并在块评估之前和之后将它们排入WindowSensor。