例程之九_GUI_获取窗口的进程PID
2012-03-16 16:46
609 查看
Ø
功能
l
获取窗口所在进程的PID
Ø
知识点
l
得到默认的display指针:XOpenDisplay
l
通过字串取对应的AtomID:XInternAtom
l
获取窗的某一属性:XGetWindowProperty
Ø
示例
l
源码
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <stdio.h>
#include <string.h>
#define MAX_PROPERTY_VALUE_LEN 4096
//取得属性值最大长度
int main(int argc, char **argv)
{
Display *disp = XOpenDisplay(NULL);
//获取默认的display指针
Window win = NULL;
int ret = -1;
Atom xa_prop_name;
Atom xa_ret_type;
int ret_format;
unsigned long ret_nitems;
unsigned long ret_bytes_after;
unsigned long tmp_size;
unsigned char *ret_prop;
int id;
if (argc < 2)
{
printf("please input
windowID, such as: ./main 0x240001e (use command xwininfo)\n");
return -1;
}
ret = sscanf(argv[1], "0x%0x", &win);
//
从程序参数中获取xwindow id
if (ret < 1)
{
printf("please input
windowID, such as: ./main 0x240001e (use command xwininfo)\n");
return -1;
}
printf("xwindow id: 0x%0x\n", win);
xa_prop_name = XInternAtom(disp, "_NET_WM_PID", False);
//
取对应字串的AtomID
if (XGetWindowProperty(disp, win, xa_prop_name, 0,
//
获取窗口属性
MAX_PROPERTY_VALUE_LEN / 4,
False, XA_CARDINAL, &xa_ret_type,
// XA_CARDINAL为数值类型
&ret_format, &ret_nitems, &ret_bytes_after,
&ret_prop) != Success)
//
后五个参数是返回值
{
printf("Cannot get
%s property.\n", "_NET_WM_PID");
return NULL;
}
else
{
memcpy(&id, ret_prop,
4);//
类型传换
printf("window pid:
%d\n", id);
}
}
l
编译$
g++ main.cpp -o main ` pkg-config glib-2.0 --libs --cflags` -lX11
l
执行结果
u
在一个终端打开一个带窗口界面的程序
u
使用以下命令获得窗口的xwindow id
$ xwininfo |grep “Window id”
运行命令后用鼠标点击程序窗口
u
运行我们编写的程序,并将十六进程的xwindow id作为参数传给程序
$ ./main 0x240001e
Ø
参考
l
程序下载
http://cid-f8aecd2a067a6b17.skydrive.live.com/self.aspx/.Public/case%7C_x11%7C_pid.tgz
http://blog.sina.com.cn/s/blog_55324d170100nnkn.html
功能
l
获取窗口所在进程的PID
Ø
知识点
l
得到默认的display指针:XOpenDisplay
l
通过字串取对应的AtomID:XInternAtom
l
获取窗的某一属性:XGetWindowProperty
Ø
示例
l
源码
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <stdio.h>
#include <string.h>
#define MAX_PROPERTY_VALUE_LEN 4096
//取得属性值最大长度
int main(int argc, char **argv)
{
Display *disp = XOpenDisplay(NULL);
//获取默认的display指针
Window win = NULL;
int ret = -1;
Atom xa_prop_name;
Atom xa_ret_type;
int ret_format;
unsigned long ret_nitems;
unsigned long ret_bytes_after;
unsigned long tmp_size;
unsigned char *ret_prop;
int id;
if (argc < 2)
{
printf("please input
windowID, such as: ./main 0x240001e (use command xwininfo)\n");
return -1;
}
ret = sscanf(argv[1], "0x%0x", &win);
//
从程序参数中获取xwindow id
if (ret < 1)
{
printf("please input
windowID, such as: ./main 0x240001e (use command xwininfo)\n");
return -1;
}
printf("xwindow id: 0x%0x\n", win);
xa_prop_name = XInternAtom(disp, "_NET_WM_PID", False);
//
取对应字串的AtomID
if (XGetWindowProperty(disp, win, xa_prop_name, 0,
//
获取窗口属性
MAX_PROPERTY_VALUE_LEN / 4,
False, XA_CARDINAL, &xa_ret_type,
// XA_CARDINAL为数值类型
&ret_format, &ret_nitems, &ret_bytes_after,
&ret_prop) != Success)
//
后五个参数是返回值
{
printf("Cannot get
%s property.\n", "_NET_WM_PID");
return NULL;
}
else
{
memcpy(&id, ret_prop,
4);//
类型传换
printf("window pid:
%d\n", id);
}
}
l
编译$
g++ main.cpp -o main ` pkg-config glib-2.0 --libs --cflags` -lX11
l
执行结果
u
在一个终端打开一个带窗口界面的程序
u
使用以下命令获得窗口的xwindow id
$ xwininfo |grep “Window id”
运行命令后用鼠标点击程序窗口
u
运行我们编写的程序,并将十六进程的xwindow id作为参数传给程序
$ ./main 0x240001e
Ø
参考
l
程序下载
http://cid-f8aecd2a067a6b17.skydrive.live.com/self.aspx/.Public/case%7C_x11%7C_pid.tgz
http://blog.sina.com.cn/s/blog_55324d170100nnkn.html
相关文章推荐
- GUI_获取窗口的进程PID
- 根据窗口ID获取进程PID
- python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过autopy实现右键菜单和另存为操作
- linux获取精准进程PID之pgrep命令
- 根据系统进程pid获取sql【脚本收藏】
- 通过进程名获取进程PID
- 通过PID获取进程名
- Process 后, 如何获取打开窗口的句柄(根据进程句柄获取窗口句柄)
- WinCE进程ID获取窗口句柄
- GetProcessMainWnd(获取进程窗口句柄)
- 如何在脚本中获取进程ID(PID)
- 通过Windows进程ID获取窗口句柄
- 由进程获取窗口(CMainframe)句柄
- Android根据进程名获取对应的进程pid
- JAVA实现获取Linux下进程PID并杀掉进程
- BAT脚本获取当前cmd.exe进程PID/PPID/信息(自杀脚本)
- 通过进程名获取窗口句柄
- windows 下获取父进程pid
- java 调用 cmd 中的 tasklist 来获取特定进程的PID
- 已知进程pid获取其父进程pid