发新话题
打印

如何更改其它程序 ListView 控件中某个 Item 的内容

如何更改其它程序 ListView 控件中某个 Item 的内容

下载源代码

一:程序说明

  这次我将介绍如何更改其他程序ListView控件中某个Item的内容,关于类似的拙文我已经写了两篇,这是第三篇,本篇和第一篇《如何向其他程序的 ListView 控件发送 LVM_GETITEMTEXT 消息》类似,区别在于:
发送的消息不同:前者是读取pszText的内容——发送LVM_GETITEMTEXT;这次是设置pszText,应该发送LVM_SETITEMTEXT;
字符串缓冲区的作用不同:前者pItem用来接收ITEMTEXT,我们可以通过ReadProcessMemory函数来读取其内容;而在本篇中p_MyItemText则用来存放我们要设置的ITEMTEXT,并用WriteProcessMemory函数将其写入到目标程序中。
作为演示,下面的这段程序将更改TaskManager中第6个项目中第1列的内容。程序运行后的效果图:

二:具体实践


//////////////////////////////////////////////////////////////////////////////////

/*

*        Send LVM_SETITEMTEXT

*        版权所有 (C) 2005 天津 赵春生

*        2005.10.28

*        http://timw.yeah.net

*        http://timw.126.com

*        本程序适用于:Win2KP SP4[Windows TaskManager(5.0.2195.6620)]

*                                 WinXP SP1[Windows TaskManager]

*        代码在Win2000P SP4   VC6 SP6测试通过

*/

//////////////////////////////////////////////////////////////////////////////////



#include<windows.h>

#include<commctrl.h>



int APIENTRY WinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPSTR     lpCmdLine,

                     int       nCmdShow)

                                         

{

        HWND hwnd;

        int iItem=0;

        LVITEM lvitem, *plvitem;

        DWORD PID;

        HANDLE hProcess;

        char *p_MyItemText;//目标程序中用来存放TEXT的地址



        //The pszText member is the pointer to a null-terminated

        //  string containing the new text; it can also be NULL.

        //以上信息是从API手册中获得的,故在本例中字符串长度不能>=12,

        //以确保字符串后有NULL。

        char str_MyItemText[12]={0};

        strcpy(str_MyItemText,"天津 赵春生");

       

       

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

        hwnd=FindWindowEx(hwnd,0,"#32770",0);

        hwnd=FindWindowEx(hwnd,0,"SysListView32",0);



        if (!hwnd)

                MessageBox(NULL,"[Windows 任务管理器] 尚未启动!","错误!",NULL);

        else

        {

                GetWindowThreadProcessId(hwnd,

TOP

发新话题