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下判断活动窗口是否全屏的主要内容,如果未能解决你的问题,请参考以下文章