【Demo 0030】获取其他进程窗体信息(防SPY++)
2011-08-22 23:04
381 查看
今天我们学习如何获取到其他进程窗体信息如: 类名,窗体内容,大小以及进程和线程ID等; 但我们做的练习将会比我们所要学的更有意思; 哈哈… 我们通过仿VS著名工具SPY++中拖拉鼠标到指定窗体上来截获窗体句柄,根据窗体句柄后获取特点窗体的信息(例程中屏避了对本进程的窗体), 根据这个例子我们对其中技术一起学习, 先看一下SPY++效果:
一、 改变鼠标光标
1. LoadCursor 加载光标资源
hCursor = LoadCursor(pcs->hInstance, MAKEINTRESOURCE(IDC_CURSOR1)); 2. SetCursor 设置光标样式
SetCursor(hCursor); 二、 获取鼠标在非窗体中的消息
1. SetCapture 设置截取鼠标事件的窗体(鼠标按下后)
SetCapture(hWnd); 2. ReleaseCapture 释放对鼠标事件截获(鼠标释放后)
ReleaseCapture(); 三、 获取鼠标下的窗体
1. GetCurrentPos 获取鼠标位置
POINT ptMouse;
GetCursorPos(&ptMouse);
2. WindowFromPoint 根据位置获取
POINT ptMouse;
GetCursorPos(&ptMouse);
HWND hWndTmp = WindowFromPoint(ptMouse); 四、 获取窗体信息(窗体内容,窗体类名,窗体风格,大小以及进程和线程ID)
//==: Retrieve the Window information
TCHAR szWndInfo[512] = {0};
TCHAR szWndText[128] = {0};
TCHAR szClsName[64] = {0};
SendMessage(hWndTmp, WM_GETTEXT, (WPARAM)128, (LPARAM)szWndText);
GetClassName(hWndTmp, szClsName, 64);
DWORD dwStyle;
dwStyle = GetClassLongPtr(hWndTmp, GCL_STYLE);
RECT rtTmp;
GetWindowRect(hWndTmp, &rtTmp);
DWORD TID;
DWORD PID;
TID = GetWindowThreadProcessId(hWndTmp, &PID);
WINDOWINFO wndInfo;
wndInfo.cbSize = sizeof(wndInfo);
GetWindowInfo(hWndTmp, &wndInfo);
_stprintf(szWndInfo,
_T("\n´°Ìå:\t 0x%0X")
_T("\nÎı¾:\t %s")
_T("\nˈ̞:\t %s")
_T("\nÑùʽ:\t 0x%0X")
_T("\n¾ØÐÎ:\t (%d,%d)-(%d,%d) %dx%d")
_T("\nÏß³Ì:\t 0x%08X")
_T("\n½ø³Ì:\t 0x%08X"),
hWndTmp,
szWndText,
szClsName,
wndInfo.dwStyle,
rtTmp.left, rtTmp.top, rtTmp.right, rtTmp.bottom, (rtTmp.right - rtTmp.left), (rtTmp.bottom - rtTmp.top),
TID,
PID);
SetWindowText(GetDlgItem(hWnd, ID_LABINFO), szWndInfo);
以下用SPY++获取的窗体信息与例程读取的信息
图1 SPY++ 图2 例程
演示代码
一、 改变鼠标光标
1. LoadCursor 加载光标资源
hCursor = LoadCursor(pcs->hInstance, MAKEINTRESOURCE(IDC_CURSOR1)); 2. SetCursor 设置光标样式
SetCursor(hCursor); 二、 获取鼠标在非窗体中的消息
1. SetCapture 设置截取鼠标事件的窗体(鼠标按下后)
SetCapture(hWnd); 2. ReleaseCapture 释放对鼠标事件截获(鼠标释放后)
ReleaseCapture(); 三、 获取鼠标下的窗体
1. GetCurrentPos 获取鼠标位置
POINT ptMouse;
GetCursorPos(&ptMouse);
2. WindowFromPoint 根据位置获取
POINT ptMouse;
GetCursorPos(&ptMouse);
HWND hWndTmp = WindowFromPoint(ptMouse); 四、 获取窗体信息(窗体内容,窗体类名,窗体风格,大小以及进程和线程ID)
//==: Retrieve the Window information
TCHAR szWndInfo[512] = {0};
TCHAR szWndText[128] = {0};
TCHAR szClsName[64] = {0};
SendMessage(hWndTmp, WM_GETTEXT, (WPARAM)128, (LPARAM)szWndText);
GetClassName(hWndTmp, szClsName, 64);
DWORD dwStyle;
dwStyle = GetClassLongPtr(hWndTmp, GCL_STYLE);
RECT rtTmp;
GetWindowRect(hWndTmp, &rtTmp);
DWORD TID;
DWORD PID;
TID = GetWindowThreadProcessId(hWndTmp, &PID);
WINDOWINFO wndInfo;
wndInfo.cbSize = sizeof(wndInfo);
GetWindowInfo(hWndTmp, &wndInfo);
_stprintf(szWndInfo,
_T("\n´°Ìå:\t 0x%0X")
_T("\nÎı¾:\t %s")
_T("\nˈ̞:\t %s")
_T("\nÑùʽ:\t 0x%0X")
_T("\n¾ØÐÎ:\t (%d,%d)-(%d,%d) %dx%d")
_T("\nÏß³Ì:\t 0x%08X")
_T("\n½ø³Ì:\t 0x%08X"),
hWndTmp,
szWndText,
szClsName,
wndInfo.dwStyle,
rtTmp.left, rtTmp.top, rtTmp.right, rtTmp.bottom, (rtTmp.right - rtTmp.left), (rtTmp.bottom - rtTmp.top),
TID,
PID);
SetWindowText(GetDlgItem(hWnd, ID_LABINFO), szWndInfo);
以下用SPY++获取的窗体信息与例程读取的信息
图1 SPY++ 图2 例程
演示代码
相关文章推荐
- 获取其他进程加载模块的详细信息
- WIN API-VFP获取第三方窗体的控件信息(句柄,窗口ID,进程ID,类名,标题)
- 【Demo 0027】获取窗体类信息(2)
- [Mac OS X Cocoa编程]如何获取其他应用程序的窗体标题以及相关信息?
- 【Demo 0082】获取特定进程堆信息
- WIN API-VFP获取第三方窗体的控件信息(句柄,窗口ID,进程ID,类名,标题
- 【Demo 0028】获取窗体信息
- 获取进程信息
- vb.net 从进程获取窗体
- 跨进程获取其他程序的DBGrid内容
- C#TreeView窗体版点击右键弹出菜单+右键获取信息
- 获取WinCE进程的内存信息
- 获取所有运行中进程的信息及常规操作
- 获取进程的模块信息
- 使用getrusage获取进程使用系统资源信息
- 【Demo 0076】获取进程中模块列表
- e邮宝 php demo api 接口解决 - 通过订单信息获取货运号
- 从注册表获取如活动进程数、CPU占用率等信息
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
- linux bash脚本获取系统信息(cpu 总内存 可用内存 文件系统大小 系统位数 进程数 软件包数量 IP地址)