我正在尝试使用此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
答案 0 :(得分:3)
这里的问题有点微妙。如果您查看XTest protocol,您会发现FAKE_EVENT
不期望EVENT_MASK
,而是期望FAKE_EVENT_TYPE
。 KeyPress
为FAKE_EVENT_TYPE
2
,而KeyRelease
为3
。在使用这些值代替EventMaskKeyPress
和EventMaskKeyRelease
之后,事情按预期工作(而且,您不需要令人讨厌的toBit
强制,这就是指向我的气味不正确的)。