代码如下:

#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相关推荐

  1. linux c 获取进程p id,详解Linux获取线程的PID(TID、LWP)的几种方式

    在 Linux C/C++ 中通常是通过 pthread 库进行线程级别的操作. 在 pthread 库中有函数: pthread_t pthread_self(void); 它返回一个 pthrea ...

  2. C# API之常用操作窗口类函数详解[查找所有窗口、获取目标句柄的类名、获取窗口文本、获取当前活动窗口、通过窗口句柄获取线程ID、获取指定窗口位置]

    /// <summary>/// 查找所有窗口(只要是在进程里面的)/// 如果不限制类名或者标题使用null代替/// </summary>/// <param nam ...

  3. Windows/Linux下获取当前线程的ID号

    序 在多线程场合,为了方便跟踪线程的运行状态,往往需要在程序中添加打印当前线程ID号的功能. 1. Linux下打印当前线程ID pthread_t pthread_self() 2. Windows ...

  4. Linux 内核进程管理之进程ID

    Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一.该数据结构 ...

  5. c++ 获取线程id_高效获取当前线程的 id

    不同平台获取当前线程 id 的方法 Windows 可以利用微软提供的 api,轻松获取当前线程的 id: int id = GetCurrentThreadId(); Linux Linux 平台一 ...

  6. linux获取java环境变量的值,linux获取java环境变量的值

    linux获取java环境变量的值 [2021-02-11 00:17:01]  简介: 服务器 这篇文章主要为大家展示了linux环境下怎么配置环境变量,内容简而易懂,希望大家可以学习一下,学习完之 ...

  7. Linux 如何取进程运行时间,linux -- 获取进程执行时间

    获取进程执行时间 一.时间概念 在linux下进行编程时,可能会涉及度量进程的执行时间.linux下进程的时间值分三种: 时钟时间(real time):指进程从开始执行到结束,实际执行的时间. 用户 ...

  8. 获取父窗口元素或者获取iframe中的元素(相同域名下)

    jquery方法 在父窗口中获取iframe中的元素 //方法1 $("#iframe的ID").contents().find("iframe中的元素");/ ...

  9. RK3288获取摄像头的Sensor ID【原创】

    平台信息: 内核:linux3.0.68  系统:android/android6.0 平台:RK3288 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 说明:通过I ...

  10. linux临时配置mac地址,Linux获取网卡型号、mac地址、修改IP地址的几种方法

    1.获取所有有(无)网卡型号 方法一.ifconfig 用法:ifconfig | grep | cut -d ':' -f 1 ubuntu root@ubuntu:~# ifconfig | gr ...

最新文章

  1. Truncate 删除数据
  2. Tomcat启动一闪而过
  3. iOS开发网络篇—数据缓存
  4. 小眼睛有多惨?美颜都懒得救你......
  5. [转载] JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍
  6. SQLyog中文乱码的解决方法
  7. html显示余额什么做,账户余额.html · dengzhao/prd_zhangyao - Gitee.com
  8. PSOLA基音同步叠加算法
  9. Element UI 重置表单功能
  10. react-native windows下环境搭建和现阶段开发测试问题汇总(持续更新)
  11. C语言cat函数的功能,R语言cat()函数
  12. winrm java客户端_winrm service
  13. 基于LED恒流驱动芯片芯鼎盛TX6122设计的DC-DC降压恒流DEMO
  14. 实现蓝色理想的运行代码
  15. 谈笑间学会大数据-Hive数据定义
  16. 常见的关系型数据库和非关系型数据及其区别
  17. zabbix模板关联群组
  18. 我对2021年前端团队的规划
  19. qsort 函数的使用
  20. 半导体的过去、现在和未来

热门文章

  1. ip变更会影响账号登陆吗_代理IP的匿名度级别会影响自身稳定性吗
  2. linux ssh-copy-id命令本地主机的公钥复制到远程主机的authorized_keys文件上
  3. 在Eclipse中使用Gradle开发web3j以太坊应用
  4. CUDNN学习笔记(1)
  5. (转)android拨打电话崩溃6.0以上实时动态权限申请
  6. Java多线程导致的的一个事物性问题
  7. jQuery .tmpl(), .template()学习资料小结
  8. sharepoint修改密码
  9. [30期] 第一个项目总结-—数码黑店在这一年开张
  10. windbg使用教程: 具体实例