Smalltalk 模拟键控事件
如何模拟在执行其他代码时按住某个键(ctrl)?以下方法的实现是什么Smalltalk 模拟键控事件,smalltalk,keydown,visualworks,Smalltalk,Keydown,Visualworks,如何模拟在执行其他代码时按住某个键(ctrl)?以下方法的实现是什么 self ctrlDownWhile: [self doSomething] 您可以尝试通过更改输入状态的“ctrlDown”状态来“欺骗”输入状态。 坏消息是它没有setter方法来访问它(可能仅在我的版本中),因此您可能需要使用以下技巧: ctrlDownWhile:aBlock "aBlock will see ctrlDown as true" |indexOfCtrlState| indexOfCt
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偏移量了。同样,上面的代码也不是线程保存的,所以最好试试窗口传感器的替代方案。。。