X11获取windows名称和ID代码

简介: X11获取windows名称和ID代码
+关注继续查看

源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <X11/X.h> 
#include <X11/Xlib.h> 
#define WINDOW_X      100
#define WINDOW_Y      100
#define WINDOW_WIDTH  500
#define WINDOW_HEIGHT 300
#define DISPLAY_TEXT  "Taishan Office"
#define FOREGROUND_COLOR 0xFF0000
#define BACKGROUND_COLOR 0x00FF00
static Display *g_pDisplay;
static Window   g_oWindow;
static Window   g_oWindowRoot;
static int      g_iScreen;
static void window_start()
{
    char     name[128] = {0};
    unsigned long foreground_pixel; 
    unsigned long background_pixel; 
    g_pDisplay = XOpenDisplay(NULL);
    if (g_pDisplay == NULL)
    {
       fprintf(stderr, "Cannot open display\n");
       exit(1);
    }
    g_iScreen = DefaultScreen(g_pDisplay);
    g_oWindowRoot = DefaultRootWindow( g_pDisplay );
    //foreground_pixel = WhitePixel(g_pDisplay, g_iScreen); 
    //background_pixel = BlackPixel(g_pDisplay, g_iScreen); 
    foreground_pixel = FOREGROUND_COLOR;
    background_pixel = BACKGROUND_COLOR;
    g_oWindow = XCreateSimpleWindow(g_pDisplay,
        g_oWindowRoot,
        WINDOW_X, WINDOW_Y,
        WINDOW_WIDTH, WINDOW_HEIGHT,
        5, //边框粗细
        foreground_pixel,
        background_pixel);
    XStoreName(g_pDisplay, g_oWindow, DISPLAY_TEXT);
    XSetIconName(g_pDisplay, g_oWindow, DISPLAY_TEXT);
    XMapWindow(  g_pDisplay, g_oWindow);
    //XCreateSimpleWindow无法正确定位,所以使用移动
    XMoveWindow(g_pDisplay, g_oWindow, WINDOW_X, WINDOW_Y);
    XSync(g_pDisplay, False);
}
static void window_event()
{
    //响应ReparentNotify
    XSelectInput(g_pDisplay, g_oWindowRoot, SubstructureNotifyMask);
    //响应按键事件
    XSelectInput(g_pDisplay, g_oWindow,     ExposureMask | KeyPressMask);
    XEvent   event;
    while (1)
    {
        XNextEvent(g_pDisplay, &event);
        if ( event.type == ReparentNotify )
        {
            Window   x11window  = g_oWindow;
            Display* x11display = g_pDisplay;
            char **srname = (char **)malloc(sizeof(char *));
            XReparentEvent *reparentevent = (XReparentEvent *)&event;
            printf("window: %ld \n", (unsigned long)(reparentevent->window));
            printf("parent: %ld \n", (unsigned long)(reparentevent->parent));
            /*获取到新建窗口的window ID*/
            //x11window  = (unsigned long)(reparentevent->window);
            //x11display = (reparentevent->display);    
            x11window   = g_oWindow;
            x11display  = g_pDisplay;
            XFetchName(x11display, x11window, srname);
            if (*srname != NULL)
            {
                printf("name: %s\n" ,*srname);    
            }
            free(*srname);
        }    
        //任意键退出
        if (event.type == KeyPress)
        {
            break;
        }
    }
}
static void window_close()
{
    XCloseDisplay(g_pDisplay);
}
int main(int argc, char** argv)
{
   window_start();
   window_event();
   window_close();
   return 0;
}


目录
相关文章
|
2月前
|
存储 Shell 开发工具
Windows系统下将代码上传至gitLab或gitHub
Windows系统下将代码上传至gitLab或gitHub
|
3月前
|
jenkins 持续交付 Windows
【Jenkins】Jenkins拉取Github代码(windows)
【Jenkins】Jenkins拉取Github代码(windows)
【Jenkins】Jenkins拉取Github代码(windows)
|
4月前
|
Java jenkins 持续交付
pytest自动化框架集成jenkins+gitee+allure,使用git下拉代码和本地代码实现,基于windows
pytest自动化框架集成jenkins+gitee+allure,使用git下拉代码和本地代码实现,基于windows
|
7月前
|
消息中间件 运维 数据可视化
【Kafka】基于Windows环境的Kafka有关环境(scala+zookeeper+kafka+可视化工具)搭建、以及使用.NET环境开发的案例代码与演示
基于Windows系统下的Kafka环境搭建;以及使用.NET 6环境进行开发简单的生产者与消费者的演示。
197 0
【Kafka】基于Windows环境的Kafka有关环境(scala+zookeeper+kafka+可视化工具)搭建、以及使用.NET环境开发的案例代码与演示
|
8月前
|
Windows
WINDOWS下获得DLL所在目录的代码
WINDOWS下获得DLL所在目录的代码
53 0
|
8月前
|
C++ Windows
VS遍历windows文件夹的代码
VS遍历windows文件夹的代码
75 0
|
10月前
|
安全 Windows
Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709
Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709
Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709
|
调度 Windows
Windows多线程——临界区、事件、互斥量、信号量详解加代码
Windows多线程——临界区、事件、互斥量、信号量详解加代码
208 0
|
Windows
X11获取windows名称和ID代码
X11获取windows名称和ID代码
197 0
|
Windows
【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )
【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )
218 0
【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )
相关产品
云迁移中心
推荐文章
更多