#define _AFXDLL
#include <afx.h>
#include <iostream>
#include <iomanip>
#include <Windows.h>
#include <string>
int main()
{
//获取窗口句柄
HWND hTaskMsgWnd = ::FindWindow("#32770", "Windows 任务管理器");
HWND hProcWnd = ::FindWindowEx(hTaskMsgWnd, NULL, "#32770", "Processes");
HWND hProcListView = ::FindWindowEx(hProcWnd, NULL, "SysListView32", NULL);
HWND hHeaderWnd = (HWND)::SendMessage(hProcListView, LVM_GETHEADER, 0, 0);
//获取行数与列数
int rows = (int)::SendMessage(hProcListView, LVM_GETITEMCOUNT, 0, 0);
int cols = (int)::SendMessage(hHeaderWnd, HDM_GETITEMCOUNT, 0, 0);
//获取窗口线程与进程ID
DWORD dwProcID = 0;
::GetWindowThreadProcessId(hProcListView, &dwProcID);
//打开进程
//注意, 如果你的电脑是64位系统, 那么"任务管理器"进程则是64位的, 使用OpenProcess实际返回的是一个64位的句柄值
//如果, 你的程序是采用W32编译器, 那么定义的进程句柄变量实际上是一个32位的句柄变量
//现在, 如果你用32位的句柄变量来保存64位的句柄值, 它实际上是保存了一个被截取后的64位的句柄值, 这个值是错误的
//这时, 你必须把编译器也调整为64位, 使句柄值内存长度统一
HANDLE hProcess = NULL;
hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcID);
//进程空间的虚拟内存分配
void* pVirBuf = ::VirtualAllocEx(hProcess, NULL, 4096, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
for (int iRowIdx = 0; iRowIdx < rows; iRowIdx++)
{
for (int iColIdx = 0; iColIdx < cols; iColIdx++)
{
//填充单个子项的相关参数
LVITEM item;
item.mask = LVIF_TEXT;
item.iItem = iRowIdx;
item.iSubItem = iColIdx;
item.cchTextMax = 256;
item.pszText = (LPSTR)((int)pVirBuf + sizeof(LVITEM));
//将单个子项的数据写入至进程虚拟内存空间pVirBuf内
//注意, X64位下不要使用DWORD, DWORD=4BYTE, SIZE_T=8BYTE
//如果使用DWORD, 会报错 "Run-Time Check Failure #2 - Stack around the variable 'xxx' was corrupted.", 一般由变量越界导致
LONGLONG dwWriteByte = 0;
::WriteProcessMemory(hProcess, pVirBuf, &item, sizeof(LVITEM), (SIZE_T*)&dwWriteByte);
//发送获取项目的Windows消息
::SendMessage(hProcListView, LVM_GETITEM, 0, (LPARAM)pVirBuf);
//将虚拟内存第sizeof(LVITEM)之后的数据读出, 保存至变量内
LONGLONG dwReadByte = 0;
std::string content(256, '\0');
::ReadProcessMemory(hProcess, (LPCVOID)((int)pVirBuf + sizeof(LVITEM)), const_cast<char*>(content.c_str()), 255, (SIZE_T*)&dwReadByte);
//输出
std::cout << content.c_str() << " ";
}
std::cout << std::endl;
}
//释放虚拟内存
::VirtualFreeEx(hProcess, pVirBuf, 4096, MEM_RELEASE);
::CloseHandle(hProcess);
return 0;
}
VC 获取任务管理器进程项ListView控件内的内容
1星 需积分: 12 76 浏览量
2017-03-16
11:08:58
上传
评论 3
收藏 7KB RAR 举报
l357630798
- 粉丝: 53
- 资源: 9
最新资源
- Edge浏览器下载文件提示 “无法安全下载” 的解决方法
- 基于springboot+layui的医院日常耗材管理系统.zip
- 计算机毕业设计-ASP.NET教育报表管理系统-权限管理模块(源代码+)-毕设源码实例.zip
- 计算机毕业设计-ASP.NET教务信息管理系统的设计与实现(源代码+)-毕设源码实例.zip
- 免费计算机毕业设计-线上公司求职招聘系统的设计与实现(包含论文+源码)
- Eleven的精益供应链管理-碓胤咨询龚胤全.rar
- 5套光伏、储能、充电收益测算表.zip
- C2 供应链集成演示平台操作手册(详细版).rar
- 3套光储充一体化站CAD+PDF图纸.zip
- c++游戏开发,本人开发的c++小游戏飞机大战(二)源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈