8

有没有办法使用 C 在 Linux 中模拟按键?

在我的具体情况下,我在 Ubuntu 9.04 上,需要一个简单的应用程序,在启动时调用“暂停”按钮。这将使 Firefox 中的 iframe 使用 Javascript 进行刷新。

4

2 回答 2

14

我假设您的意思是“X11 应用程序”-从您的描述中并不完全清楚您打算做什么。下面的代码片段将使用 XTest 扩展将“暂停”键码发送到当前在 X11 下具有键盘输入焦点的应用程序 - 据我所知,这是“伪造”键盘事件的最兼容方式。看看您是否可以将此应用到您的场景中(不对 XOpenDisplay 是否成功进行错误检查,以使其更简单)。

#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
...
Display *display;
unsigned int keycode;
display = XOpenDisplay(NULL);
...
keycode = XKeysymToKeycode(display, XK_Pause);
XTestFakeKeyEvent(display, keycode, True, 0);
XTestFakeKeyEvent(display, keycode, False, 0);
XFlush(display);

您将需要链接 -lX11 -lXtst。

显然,当时Firefox需要重点关注。

但是,我很想知道您要完成的更大任务是什么——我怀疑应该有比欺骗按键事件更优雅的解决方案。

于 2009-08-11T19:54:17.823 回答
7

有一个名为“xdotool”的可编程库:

sudo apt-get install libxdo-dev libxdo2

猫测试.c

#include <stdio.h>
#include <stdlib.h>
#include <xdo.h>
#include <unistd.h>
int main() {
    xdo_t * x = xdo_new(":0.0");

    while(1) {
        printf("simulating Shift_L keypress\n");
        xdo_keysequence(x, CURRENTWINDOW, "Shift_L", 0);
        sleep(5);
    }

        return 0; 
}

像这样运行:

gcc test.c -lxdo -o 测试

于 2012-12-29T16:43:36.067 回答