2009-08-11 4 views
7

C를 사용하여 Linux에서 키 누르기를 시뮬레이션 할 수있는 방법이 있습니까?리눅스 C 콘솔 응용 프로그램에서 키 누르기 시뮬레이션

내 특정 상황에서 저는 우분투 9.04를 사용하고 있으며 실행될 때 "일시 중지"버튼을 누르는 간단한 응용 프로그램이 필요합니다. 그건 자바 스크립트를 사용하여 새로 고치 Firefox에서 iframe을 얻을 것이다.

답변

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); 

-lX11 -lXtst와 연결해야합니다.

분명히 파이어 폭스는 그 당시 초점이 필요합니다.

그러나 나는 당신이 달성하려고하는 더 큰 작업이 무엇인지 알고 싶어합니다. 키 누르기 이벤트를 속이는 것보다 더 우아한 해결책이 있어야한다고 생각합니다.

+1

위의 코드에 대한 내 자신의 사용 사례에 대한 측면 설명 : 나는 웹캠 앞에서 머리를 움직여 화살표 키를 위조 할 수있는 OpenCV 기반 주말 핵을 사용했다. /. 게시물과 같은 시간에 샌드위치를 ​​먹으십시오 :-) –

+0

그리핀 powermate를 사용하여 iframe을 다시로드하고 싶습니다. :) – Baversjo

+0

아, 내 사건과 거의 같은 사용법입니다. :) –

6

'xdotool'라는 프로그램 라이브러리있다 :

는 sudo apt-get을 설치 libxdo-DEV이 같은 실행

#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; 
} 

고양이 TEST.C

libxdo2 :

gcc test.c -lxdo -o 테스트

관련 문제