2010-08-23 5 views

답변

1
#include "stdio.h" 
#include "X11/Xlib.h" 
#include "X11/keysym.h" 
#include "time.h" 

Display *display=NULL; 
unsigned int keycode; 

int main() 
{ 
display = XOpenDisplay(NULL); 
keycode = XKeysymToKeycode(display, XK_Caps_Lock); 

printf ("\npressed\n"); 
XTestFakeKeyEvent(display, keycode, True, CurrentTime); 
XFlush(display); 
printf ("\nreleased\n"); 
XTestFakeKeyEvent(display, keycode, False, CurrentTime); 
XFlush(display); 
sleep(3); 

/* type something here */ 

printf ("\npressed\n"); 
XTestFakeKeyEvent(display, keycode, True, CurrentTime); 
XFlush(display); 
printf ("\nreleased\n"); 
XTestFakeKeyEvent(display, keycode, False, CurrentTime); 
XFlush(display); 
sleep(3); 

return 0; 
} 

헤더 파일의 경우 "-"를 "<"으로 바꿉니다. GCC main.c를 -lX11 -lXtst

를 사용 컴파일 내 blog

2
#include <X11/X.h> 
#include <X11/Xlib.h> 
#include <X11/keysym.h> 
#include <X11/extensions/XTest.h> 

// Function: Click Key (press and release key) 
void click_key(Display* p_display , KeyCode keycode) { 

    XTestFakeKeyEvent(p_display , keycode , True , 0); // key press event 
    XTestFakeKeyEvent(p_display , keycode , False , 0); // key release event 
    XFlush(p_display); 

    return; 
} 

// Main 
int main() { 

    Display* p_display = XOpenDisplay(NULL); 
    KeySym keysym = XK_VoidSymbol; 
    KeyCode keycode = NoSymbol; 

    keysym = XK_Caps_Lock; 
    keycode = XKeysymToKeycode(p_display , keysym); 

    click_key(p_display , keycode); // activates CapsLock 
    click_key(p_display , keycode); // deactivates CapsLock 

    XCloseDisplay(p_display); 
    return 0; 
} 
에 솔루션 위에 배치