3

Xlibを使用してCAPSLOCKのオンとオフの押下をシミュレートするにはどうすればよいですか?

4

2 に答える 2

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;
}
于 2011-05-21T21:09:34.987 に答える
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;
}

ヘッダーファイルの場合は、""-sを<>に置き換えます。gcc main.c-lX11-lXtstを使用してコンパイルします

上記の解決策を私のブログに投稿しました

于 2010-08-23T15:00:52.193 に答える