有沒有什麼方法可以在Linux中使用C來模擬按鍵?在Linux C控制檯應用程序中模擬按鍵
在我的具體情況中,我在Ubuntu 9.04上,需要一個簡單的應用程序,在啓動時調用「暫停」按鈕按下按鈕。這將使Firefox中的iframe使用Javascript進行刷新。
有沒有什麼方法可以在Linux中使用C來模擬按鍵?在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當時需要關注焦點。
但是,我很想知道你要完成的重要任務是什麼 - 我懷疑應該有一個比欺騙按鍵事件更優雅的解決方案。
有一個叫 'xdotool' 可編程庫:
命令和apt-get安裝libxdo-dev的libxdo2
貓test.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 test
關於我自己用於上述代碼的使用案例的旁註:我使用了OpenCV支持的週末黑客,讓我通過在攝像頭前移動頭部來僞造箭頭按鍵(所以我可以滾動/。帖子和同時吃三明治:-) – 2009-08-11 20:04:53
我想用griffin powermate重新加載一個iframe :) – Baversjo 2009-08-11 20:45:03
啊,所以它幾乎和我的情況一樣:) – 2009-08-11 20:51:31