2012-02-21 122 views
0

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

self ctrlDownWhile: [self doSomething] 
+0

对不起 - 我笨 - 评论已删除。 – blabla999 2012-03-26 11:43:31

回答

1

您可以尝试通过更改其“ctrlDown”状态来“欺骗”输入状态。 坏消息是,它没有一个二传手的方法来访问它(也许只有在我的版本),所以你可能有一个绝招到那里:

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键的keyRelease事件,并在块评估之前和之后将它们排入WindowSensor。

+0

当然,你可以添加这个作为InputState的扩展;那么就不需要纠正instVar-offset。 – blabla999 2012-06-04 21:08:17

+0

也,以上是不是线程保存,所以更好地尝试窗口传感器替代... ... - – blabla999 2012-06-04 21:08:58