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

1 篇文章 0 订阅

本文主要参考: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}'

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值