Xlib

来自百合仙子's Wiki
跳转到导航 跳转到搜索

获取 X Display 名

当前 Display 的名字,可用 DisplayString(dpy) 来获取,它是一个宏 ((_XPrivDisplay)dpy)->display_name ,其中参数 dpyDisplay 类型的参数,使用 XOpenDisplay 打开, XCloseDisplay 关闭。

#include<stdio.h>
#include<X11/Xlib.h>

int main(int argc, char *argv[]){

  Display *dpy = NULL;
   if((dpy = XOpenDisplay((char *)NULL)) == NULL){
    return 1;
  }
  printf("%s\n", DisplayString(dpy));
  XCloseDisplay(dpy);

  return 0;
}

使用 -lX11 参数编译。

获取鼠标位置

#include<stdio.h>
#include<X11/Xlib.h>

 int main(int argc, const char **argv){
  Display *dpy = XOpenDisplay(NULL);
   if(dpy == NULL){
    return 1;
  }
  XEvent event;

  /* get info about current pointer position */
  XQueryPointer(dpy, RootWindow(dpy, DefaultScreen(dpy)),
      &event.xbutton.root, &event.xbutton.window,
      &event.xbutton.x_root, &event.xbutton.y_root,
      &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
  XCloseDisplay(dpy);

  printf("The mouse is at (%d, %d).\n", event.xbutton.x, event.xbutton.y);
  return 0;
}

Xtest

Awesomeroot.fake_input 也实现了此功能。

模拟鼠标点击

#include<X11/Xlib.h>
#include<X11/extensions/XTest.h>

int clickAt(int x, int y){
  Display *dpy = XOpenDisplay(NULL);
   if(dpy == NULL){
    return 0;
  }

  XEvent event;

  /* get info about current pointer position */
  XQueryPointer(dpy, RootWindow(dpy, DefaultScreen(dpy)),
      &event.xbutton.root, &event.xbutton.window,
      &event.xbutton.x_root, &event.xbutton.y_root,
      &event.xbutton.x, &event.xbutton.y,
      &event.xbutton.state);

  XTestFakeMotionEvent(dpy, -1, x, y, 0);
  XTestFakeButtonEvent(dpy, 1, 1, 0);
  XTestFakeButtonEvent(dpy, 1, 0, 0);
  /* place the mouse where it was */
  XTestFakeMotionEvent(dpy, -1, event.xbutton.x, event.xbutton.y, 0);
  XCloseDisplay(dpy);
  return 1;
}

编译参数: -lX11 -lXtst

XScreenSaver

获取用户 idle 时长(毫秒)[1]

#include<X11/Xlib.h>
#include<X11/extensions/scrnsaver.h>

unsigned long scrnsaver_idletime(){
  Display *display;
  XScreenSaverInfo *info;

  if((display = XOpenDisplay(NULL)) == NULL){
    perror("failed to open display");
  }

  info = XScreenSaverAllocInfo();
  XScreenSaverQueryInfo(display, DefaultRootWindow(display), info);

  return info->idle;
}

编译参数: -lXss

参见

外部链接

参考资料