LINUX获取当前窗口的ID
代码如下:
#ifndef __WINDOWIDUTIL_H__
#define __WINDOWIDUTIL_H__// win
#ifdef WIN32#include <windows.h>typedef struct
{HWND hWnd;DWORD dwPid;
}WNDINFO;BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{WNDINFO* pInfo = (WNDINFO*)lParam;DWORD dwProcessId = 0;GetWindowThreadProcessId(hWnd, &dwProcessId);if(dwProcessId == pInfo->dwPid){pInfo->hWnd = hWnd;return FALSE;}return TRUE;
}WId get_win_id_from_pid(DWORD dwProcessId)
{WNDINFO info = {0};info.hWnd = NULL;info.dwPid = dwProcessId;EnumWindows(EnumWindowsProc, (LPARAM)&info);return (WId)info.hWnd;
}#else // linux#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <iostream>
#include <list>
#include <stdlib.h>
#include <unistd.h>class WindowsMatchingPid
{
public:WindowsMatchingPid(Display *display, Window wRoot, unsigned long pid): _display(display),_pid(pid){// Get the PID property atom._atomPID = XInternAtom(display, "_NET_WM_PID", True);if(_atomPID == None){std::cout << "No such atom" << std::endl;return;}search(wRoot);}const std::list<Window> &result() const { return _result; }private:unsigned long _pid;Atom _atomPID;Display *_display;std::list<Window> _result;voidsearch(Window w){// Get the PID for the current Window.Atom type;int format;unsigned long nItems;unsigned long bytesAfter;unsigned char *propPID = 0;if(Success == XGetWindowProperty(_display,w,_atomPID,0,1,False,XA_CARDINAL,&type,&format,&nItems,&bytesAfter,&propPID)){if(propPID != 0){// If the PID matches, add this window to the result set.if(_pid == *((unsigned long *)propPID)){_result.push_back(w);}XFree(propPID);}}// Recurse into child windows.Window wRoot;Window wParent;Window *wChild;unsigned nChildren;if(0 != XQueryTree(_display, w, &wRoot, &wParent, &wChild, &nChildren)){for(unsigned i = 0; i < nChildren; i++)search(wChild[i]);}//XFree(propPID);}
};//getpid()
unsigned long get_win_id_from_pid(int pid)
{//std::cout << "Searching for windows associated with PID " << pid << std::endl;// Start with the root window.Display *display = XOpenDisplay(0);WindowsMatchingPid match(display, XDefaultRootWindow(display), pid);// Print the result.const std::list<Window> &result = match.result();long win_id = 0;
#if 0for(std::list<Window>::const_iterator pos = result.begin(); pos != result.end(); pos++){std::cout << "Window #" << (unsigned long)(*pos) << std::endl;win_id = (unsigned long)(*pos);break;}
#elsewin_id = (long)(*result.begin());
#endifcout << "Window id: "<< win_id << endl;return win_id;
}#endif#endif // __WINDOWIDUTIL_H__
LINUX获取当前窗口的ID相关推荐
- linux c 获取进程p id,详解Linux获取线程的PID(TID、LWP)的几种方式
在 Linux C/C++ 中通常是通过 pthread 库进行线程级别的操作. 在 pthread 库中有函数: pthread_t pthread_self(void); 它返回一个 pthrea ...
- C# API之常用操作窗口类函数详解[查找所有窗口、获取目标句柄的类名、获取窗口文本、获取当前活动窗口、通过窗口句柄获取线程ID、获取指定窗口位置]
/// <summary>/// 查找所有窗口(只要是在进程里面的)/// 如果不限制类名或者标题使用null代替/// </summary>/// <param nam ...
- Windows/Linux下获取当前线程的ID号
序 在多线程场合,为了方便跟踪线程的运行状态,往往需要在程序中添加打印当前线程ID号的功能. 1. Linux下打印当前线程ID pthread_t pthread_self() 2. Windows ...
- Linux 内核进程管理之进程ID
Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一.该数据结构 ...
- c++ 获取线程id_高效获取当前线程的 id
不同平台获取当前线程 id 的方法 Windows 可以利用微软提供的 api,轻松获取当前线程的 id: int id = GetCurrentThreadId(); Linux Linux 平台一 ...
- linux获取java环境变量的值,linux获取java环境变量的值
linux获取java环境变量的值 [2021-02-11 00:17:01] 简介: 服务器 这篇文章主要为大家展示了linux环境下怎么配置环境变量,内容简而易懂,希望大家可以学习一下,学习完之 ...
- Linux 如何取进程运行时间,linux -- 获取进程执行时间
获取进程执行时间 一.时间概念 在linux下进行编程时,可能会涉及度量进程的执行时间.linux下进程的时间值分三种: 时钟时间(real time):指进程从开始执行到结束,实际执行的时间. 用户 ...
- 获取父窗口元素或者获取iframe中的元素(相同域名下)
jquery方法 在父窗口中获取iframe中的元素 //方法1 $("#iframe的ID").contents().find("iframe中的元素");/ ...
- RK3288获取摄像头的Sensor ID【原创】
平台信息: 内核:linux3.0.68 系统:android/android6.0 平台:RK3288 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 说明:通过I ...
- linux临时配置mac地址,Linux获取网卡型号、mac地址、修改IP地址的几种方法
1.获取所有有(无)网卡型号 方法一.ifconfig 用法:ifconfig | grep | cut -d ':' -f 1 ubuntu root@ubuntu:~# ifconfig | gr ...
最新文章
- Truncate 删除数据
- Tomcat启动一闪而过
- iOS开发网络篇—数据缓存
- 小眼睛有多惨?美颜都懒得救你......
- [转载] JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍
- SQLyog中文乱码的解决方法
- html显示余额什么做,账户余额.html · dengzhao/prd_zhangyao - Gitee.com
- PSOLA基音同步叠加算法
- Element UI 重置表单功能
- react-native windows下环境搭建和现阶段开发测试问题汇总(持续更新)
- C语言cat函数的功能,R语言cat()函数
- winrm java客户端_winrm service
- 基于LED恒流驱动芯片芯鼎盛TX6122设计的DC-DC降压恒流DEMO
- 实现蓝色理想的运行代码
- 谈笑间学会大数据-Hive数据定义
- 常见的关系型数据库和非关系型数据及其区别
- zabbix模板关联群组
- 我对2021年前端团队的规划
- qsort 函数的使用
- 半导体的过去、现在和未来
热门文章
- ip变更会影响账号登陆吗_代理IP的匿名度级别会影响自身稳定性吗
- linux ssh-copy-id命令本地主机的公钥复制到远程主机的authorized_keys文件上
- 在Eclipse中使用Gradle开发web3j以太坊应用
- CUDNN学习笔记(1)
- (转)android拨打电话崩溃6.0以上实时动态权限申请
- Java多线程导致的的一个事物性问题
- jQuery .tmpl(), .template()学习资料小结
- sharepoint修改密码
- [30期] 第一个项目总结-—数码黑店在这一年开张
- windbg使用教程: 具体实例