【问题标题】:Simulate CAPS LOCK press in Xlib在 Xlib 中模拟 CAPS LOCK 按下
【发布时间】:2010-08-23 11:55:41
【问题描述】:

如何使用 Xlib 模拟 CAPS LOCK 打开和关闭按下?

【问题讨论】:

    标签: keyboard-events xlib xserver


    【解决方案1】:
    #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;
    }
    

    【讨论】:

      【解决方案2】:
      #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

      上面的解决方案贴在我的blog

      【讨论】:

        猜你喜欢
        • 2011-11-08
        • 1970-01-01
        • 2022-01-15
        • 2012-02-22
        • 2011-01-11
        • 2015-02-09
        • 1970-01-01
        • 2014-03-16
        相关资源
        最近更新 更多