读取别的程序中SysListView32的内容

没原来那个名字长了 2011-03-27 02:50:34

HWND hwnd;
int iItem=0;
LVITEM lvitem, *plvitem;
char ItemBuf[512],*pItem;
DWORD PID;
HANDLE hProcess;


hwnd=::FindWindow("#32770","Windows 任务管理器");
hwnd=::FindWindowEx(hwnd,0,"#32770",0);
hwnd=::FindWindowEx(hwnd,0,"SysListView32",0);

if (!hwnd)
{
::MessageBox(NULL,"[Windows 任务管理器] 尚未启动!","错误!",NULL);
return;
}

else
{
iItem=::SendMessage(hwnd,LVM_GETNEXTITEM,-1,LVNI_SELECTED);
if (iItem==-1)

::MessageBox(NULL,"没有指定目标进程 !","错误!",NULL);

else
{
//itoa(iItem,temp,10);
//MessageBox(NULL,temp,"iItem",NULL);
GetWindowThreadProcessId(hwnd, &PID);

hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
if (!hProcess)

::MessageBox(NULL,"获取进程句柄操作失败!","错误!",NULL);

else
{
plvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
pItem=(char*)VirtualAllocEx(hProcess, NULL, 512, MEM_COMMIT, PAGE_READWRITE);
if ((!plvitem)||(!pItem))

::MessageBox(NULL,"无法分配内存!","错误!",NULL);

else
{
lvitem.cchTextMax=512;
//lvitem.iSubItem=1;//PID
lvitem.iSubItem=0; //ProcessName
lvitem.pszText=pItem;
WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);
::SendMessage(hwnd, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem);
ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);

::MessageBox(NULL,ItemBuf,"ItemBuf",NULL);
}
}
}
}

//释放内存
CloseHandle(hwnd);
CloseHandle(hProcess);
VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE);
VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);


以上代码可以读到任务管理器选中的进程名称
如果我想读取整个任务管理器SysListView32中的内容应该怎么做
比如我想读取SysListView32中的所有映像名称(注意我想要学习的是读取其它程序中SysListView32的方法其它读进程名称方法就免了)
最好能把所有的名称放在一个CString中来
请哪个大大放点代码不胜感激
...全文
1119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fishion 的回复:]
恭喜楼主啊
[/Quote]
你说的那个Windows网络与通信程序设计(第2版) 第九章,EnumeHosts,我试了杂不能扫描局域网电脑呢?
fishion 2011-03-27
  • 打赏
  • 举报
回复
恭喜楼主啊
TandyT 2011-03-27
  • 打赏
  • 举报
回复
就是用循环来读取啊
Dreadnought 2011-03-27
  • 打赏
  • 举报
回复

恭喜恭喜
  • 打赏
  • 举报
回复
散分....见者有份...
忘了说iItem是用ListView_GetItemCount得到的
iItem=ListView_GetItemCount(hwnd);
  • 打赏
  • 举报
回复
搞定...貌似只能用循环一个一个读取

for(int i=0;i<iItem;i++)
{

lvitem.cchTextMax=512;
//lvitem.iSubItem=1;//PID
lvitem.iSubItem=1; //这个其实是项id
lvitem.pszText=pItem;
WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);
::SendMessage(hwnd, LVM_GETITEMTEXT, i, (LPARAM)plvitem);
ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);

//::MessageBox(NULL,ItemBuf,"ItemBuf",NULL);


}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧