Smalltalk 模拟键控事件

Smalltalk 模拟键控事件,smalltalk,keydown,visualworks,Smalltalk,Keydown,Visualworks,如何模拟在执行其他代码时按住某个键(ctrl)?以下方法的实现是什么 self ctrlDownWhile: [self doSomething] 您可以尝试通过更改输入状态的“ctrlDown”状态来“欺骗”输入状态。 坏消息是它没有setter方法来访问它(可能仅在我的版本中),因此您可能需要使用以下技巧: ctrlDownWhile:aBlock "aBlock will see ctrlDown as true" |indexOfCtrlState| indexOfCt

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

self ctrlDownWhile: [self doSomething]
您可以尝试通过更改输入状态的“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.
    ].

另一种方法是为CTRL键创建keyPress&keyRelease事件,并在块求值前后将其排入WindowsSensor。

抱歉-我愚蠢-注释已删除。当然,您可以将其添加为InputState的扩展;那么就不需要修改instVar偏移量了。同样,上面的代码也不是线程保存的,所以最好试试窗口传感器的替代方案。。。