0

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

self ctrlDownWhile: [self doSomething]
4

1 回答 1

1

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

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

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

于 2012-06-04T21:07:34.993 回答