1

我正在尝试使用 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
4

1 回答 1

3

这里的问题有点微妙。如果您查看XTest 协议,您会发现FAKE_EVENT不需要EVENT_MASKa 而是需要FAKE_EVENT_TYPE. KeyPressFAKE_EVENT_TYPE 2而是。KeyRelease_ 3在使用这些值代替EventMaskKeyPressand之后,事情会按预期工作EventMaskKeyRelease(此外,您不需要讨厌的toBit强制,这是让我认为这是不正确的气味)。

于 2013-03-27T14:50:55.867 回答