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

标签 c linux x11 keypress

有什么方法可以在 Linux 中使用 C 来模拟按键吗?

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

最佳答案

我假设您的意思是“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 需要有焦点。

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

关于c - 在 Linux C 控制台应用程序中模拟按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1262310/

相关文章:

x11 - XLib 锁定鼠标位置(鼠标环绕)

linux - XCB 准备好投入生产了吗?我应该改用 Xlib 吗?

c++ - 避免在 C++ 库中使用全局对象

linux - 编译到内核中的驱动程序的 init 函数调用

c - 两个独立进程之间的共享变量

linux - Mono 3.0.1 --> 为 Ubuntu 14.04 LTS (AWS Linux AMI) 编译 xsp 时出错

r - X11 在 R 中不可用

无法获取客户端通过 TCP 发送的消息

子进程可以在 C、Unix 中执行 waitpid() 和 wait()

c - 错误: Unknown symbol in module?