使用XHB进行假按键操作

时间:2013-03-27 04:33:07

标签: haskell keyboard x11 xcb

我正在尝试使用此example code作为参考来模拟使用XHB和XTest的按键操作。不幸的是,无论我做什么,结果程序都没有效果。没有例外,没有警告。

有什么想法吗?

我在Ubuntu 12.04上使用XHB 0.5.2012.11.23和GHC 7.4.1。

这是我到目前为止所得到的:

import Control.Monad
import Control.Concurrent
import Graphics.XHB
import Graphics.XHB.Gen.Test

main = do
    Just c <- connect
    let keyCode = 38  -- A
    forever $ do
        fakeInput c $ MkFakeInput (toBit' EventMaskKeyPress) keyCode 0 (fromXid xidNone) 0 0 0
        threadDelay $ 1 * 1000
        fakeInput c $ MkFakeInput (toBit' EventMaskKeyRelease) keyCode 0 (fromXid xidNone) 0 0 0
        threadDelay $ 1 * 1000

toBit' :: (BitEnum a, Integral b) => a -> b
toBit' = fromIntegral . toBit

1 个答案:

答案 0 :(得分:3)

这里的问题有点微妙。如果您查看XTest protocol,您会发现FAKE_EVENT不期望EVENT_MASK,而是期望FAKE_EVENT_TYPEKeyPressFAKE_EVENT_TYPE 2,而KeyRelease3。在使用这些值代替EventMaskKeyPressEventMaskKeyRelease之后,事情按预期工作(而且,您不需要令人讨厌的toBit强制,这就是指向我的气味不正确的)。