当前位置: 首页 > news >正文

ubuntu Setforeground 前台应用切换

场景分析

有这样一个系统,一个服务主进程用于接收指令,其它服务是独立的gui 程序,服务进程根据命令将对应的gui 程序切换到前台。

windows 平台有Setforeground 这个api,可以根据进程ID,将某个应用的窗口切换到前台。ubuntu 并没有类似的api, 这里借助xdotool 这个第三方库,实现类似的功能。

xdotool git clone 后,直接make,生成动态库libxdo 和执行程序程序 xdotool。

需求

SetForeGround 大概就是根据进程ID,并激活该窗口为前台窗口。用xdotool 命令实现如下

xdotool search --pid 进程ID
#返回窗口idxdotool windowactivate 窗口ID

 search 返回的ID 如果有多个,是因为一个进程有多个窗口,需要根据窗口标题再筛选

实际应用中,一般直接调用库,代码实现如下:

bool SetForeground(uint32_t pid, const char* window_name)
{Window *list = NULL;unsigned int nwindows;xdo_search_t search;xdo_t *context = xdo_new(NULL);memset(&search, 0, sizeof(xdo_search_t));search.max_depth = -1;search.require = xdo_search::SEARCH_ANY;search.pid = pid;search.searchmask = SEARCH_PID;do{if(list != NULL){free(list);}xdo_search_windows(context, &search, &list, &nwindows);if(nwindows > 0){for(int i = 0;i < nwindows;i++){unsigned char *name;int name_len;int name_type;xdo_get_window_name(context, list[i], &name, &name_len, &name_type);QString window_name((char*)name);if(window_name == window_name){xdo_activate_window(context, list[i]);}}}usleep(500000);}while(nwindows == 0);if(list != NULL){free(list);}xdo_free(context);return true;
}//调用:
SetForeground(QCoreApplication::applicationPid(), this->windowTitle().toStdString().c_str());

注:这个只适用于x11 图形平台,wayland 可能存在问题。

http://www.lryc.cn/news/240713.html

相关文章:

  • 【Java 进阶篇】从Java对象到JSON:Jackson的魔法之旅
  • HarmonyOS ArkTS语言,运行Hello World(二)
  • 四、文件包含漏洞
  • Java中基于SSM框架的数据保存方法与日期处理
  • 编译器核心技术概览
  • 本地训练,开箱可用,Bert-VITS2 V2.0.2版本本地基于现有数据集训练(原神刻晴)
  • 守护进程的理解
  • VMware虚拟机的安装教程
  • Linux环境搭建(tomcat,jdk,mysql下载)
  • 80万条中文ChatGPT多轮对话数据集
  • 阿里云ECS服务器如何搭建并连接FTP,完整步骤
  • uni-app 使用uni.getLocation获取经纬度配合腾讯地图api获取当前地址
  • cocos2dx ​​Animate3D (一)
  • 2023年最新PyCharm环境搭建教程(含Python下载安装)
  • 3D火山图绘制教程
  • 跳跃游戏[中等]
  • 华为昇腾开发板共享Windows网络上网的方法
  • 【工具栏】热部署不生效
  • 一键去水印免费网站快速无痕处理图片、视频水印
  • 分片并不意味着分布式
  • Python中的函数
  • 推荐一款png图片打包plist工具pngPackerGUI_V2.0
  • Docker快速安装Mariadb11.1
  • CuratorFrameworkFactory.builder()方法可配置属性
  • 鸿蒙 ark ui 轮播图实现教程
  • 看不惯AI版权作品被白嫖!Stability AI副总裁选择了辞职,曾领导开发Stable Audio
  • 基于Python+OpenCV+Tensorflow图像迁移的艺术图片生成系统
  • leetcode 32最长有效括号 34在排序数组中查找元素的第一个和最后一个位置
  • 【附代码】判断线段是否相交算法(Python,C++)
  • PDF控件Spire.PDF for .NET【转换】演示:将 PDF 转换为 word、HTML、SVG、XPS