Linux下判断活动窗口是否全屏

Posted 杨书落

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下判断活动窗口是否全屏相关的知识,希望对你有一定的参考价值。

本文主要参考:Linux-Windows获取系统当前应用的窗口状态
填的转载

1、使用X11

Linux下窗口状态检可以通过X11的库来进行获取
不管是单文件编译还是项目文件编译都要有X11的动态库LIBS += -lX11

#include <X11/Xlib.h>
bool IsCurreenWindowFullScreen()

	//首先创建一个窗口显示连接
    Display *display = XOpenDisplay(NULL);
	
	//获得当前的焦点窗口
    Window focus;
    int revert;
    XGetInputFocus(display, &focus, &revert);
	
	//获得窗口的属性
	XWindowAttributes attr;
    XGetWindowAttributes(display, focus, &attr);

	//获得屏幕的尺寸
    int screen_width = attr.screen->width;
    int screen_height = attr.screen->height;
	
	//关闭显示连接
    XCloseDisplay(display);

	//尺寸判断
    if((attr.height == screen_height)&&(attr.width == screen_width))
    
        return true;
    
    else
    
        return false;
    


采用X11的的库接口来获取当前窗口的属性是有缺陷的,部分应用的窗口尺寸获取不到。
比如浏览器的子窗口。

2、使用linux命令获取活动窗口大小与屏幕大小比较

using namespace std;
//剔除前后的空格和换行
void Trim(string & str)

    string blanks("\\f\\v\\r\\t\\n ");
    str.erase(0,str.find_first_not_of(blanks));
    str.erase(str.find_last_not_of(blanks) + 1);

//执行命令行的命令
string exec_command_line(string input_cmd_line)

    FILE* pipe = popen(input_cmd_line.c_str(),"r");
    if (!pipe)
        return string("ERROR");

    char buffer[256];
    string result ="";
    while(!feof(pipe))
    
        if(fgets(buffer, 256, pipe) != NULL)
                result += buffer;
    
    pclose(pipe);
    return result;


//判断当前窗口是否全屏
void IsCurreenWindowFullScreen()

    //获取窗口的ID
    string active_win_cmd = string("xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | \\
                                     awk 'print $5' | sed 's/,//' | sed 's/^0x/0x0/'");
    string active_win_id = exec_command_line(active_win_cmd);
    Trim(active_win_id);

    //异常ID过滤
    if(active_win_id == string("0x00"))
    
        return;
    
    
    //获取屏幕尺寸
    string screen_geo_info_cmd = string("xwininfo -root | awk -F'[ +]' '$3 ~ /-geometry/ print $4'");
    string screen_info = exec_command_line(screen_geo_info_cmd);
    Trim(screen_info);
    
    //根据窗口ID获取窗口信息
    string search_window_cmd = string("xwininfo -id  ") + active_win_id
            + string(" | awk -F'[ +]' '$3 ~ /-geometry/ print $4'");

    string active_window_info = exec_command_line(search_window_cmd);
    Trim(active_window_info);

    //窗口状态判断
    if(active_window_info == screen_info)
    
       //do something when full screen
    
    else
    
       //do something when not full screen
    


在多屏幕下其它常用的命令:
```cpp
#获得屏幕的个数
xrandr | grep ' connected ' | wc -l

#多屏幕状态下获取屏幕尺寸
xwininfo -root | awk -F'[ +x]' '$3 ~ /-geometry/ printf "%dx%d",$4/'"$(xrandr | grep ' connected ' | wc -l)"',$5'

以上是关于Linux下判断活动窗口是否全屏的主要内容,如果未能解决你的问题,请参考以下文章

Linux下判断活动窗口是否全屏

判断当前窗口是否是全屏的山寨版和官方版

UI: 窗口全屏, 窗口尺寸

C#Winform程序判断是不是有全屏窗口程序正在运行

故事板:如何弹出不全屏

故事板:如何弹出而不是全屏