2012-02-21 156 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