在Linux C控制台应用程序中模拟按键

Bav*_*sjo 7 c linux x11 keypress

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

在我的具体情况下,我使用的是Ubuntu 9.04并需要一个简单的应用程序,在启动时调用"暂停"按钮.这将在Firefox中使用Javascript刷新iframe.

And*_*w Y 13

我认为你的意思是"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);
Run Code Online (Sandbox Code Playgroud)

您需要链接-lX11 -lXtst.

显然火狐需要在那个时候关注.

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

  • 关于我自己对上述代码的用例的侧面评论:我有一个由 OpenCV 驱动的周末黑客,它允许我通过在网络摄像头前移动我的头来伪造箭头按键(这样我就可以滚动 /. 帖子并在同一时间 :-) (2认同)

Mic*_*nes 7

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

sudo apt-get install libxdo-dev libxdo2

猫试验

#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; 
}
Run Code Online (Sandbox Code Playgroud)

像这样运行:

gcc test.c -lxdo -o test