2024年3月29日发(作者:)

向其他程序的ListView控件发送LVM_GETITEMTEXT》

一:问题的由来与解决方法:

首先给大家介绍一个我编写的小程序――CallFI(Call FileInfo),他与2K/XP中的(Windows

TaskManager)程序配合使用。他能获取指定进程的路径并依此调用FileInfo(文件类型分析工具)程序,这样你

就能更加全面得了解这个进程了。

当你选中一个进程并运行CallFI后,CallFI首先向中的ListView控件发送

LVM_GETNEXTITEM消息来确定你所选定的是哪个index,然后再发送LVM_GETITEMTEXT消息获取相应的

值(PID),以便根据该PID进行后面的一系列操作。index很顺利得就得到了,但当我直接向ListView控件发

送LVM_GETITEMTEXT消息时却无法得到我想要的返回值!这就是本文所要解决的问题。

在GOOGLE上我找到了Cory Nelson写的《Stealing Program's Memory》一文,问题的关键在于:利

用WriteProcessMemory()函数将LVITEM结构插入到目标进程中……

二:具体实践:

#include

#include

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

向其他程序的ListView控件发送LVM_GETITEMTEXT

1

int nCmdShow)

{

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);

else

向其他程序的ListView控件发送LVM_GETITEMTEXT

2