游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1379|回复: 1

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

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2005-11-3 21:15:00 | 显示全部楼层 |阅读模式



作者:天津/赵春生

一:程序说明

  这次我将介绍如何更改其他程序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, &ampID);
                       
                hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
                if (!hProcess)
                        MessageBox(NULL,"获取进程句柄操作失败!","错误!",NULL);
                else
                {
                        plvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
                        p_MyItemText=(char*)VirtualAllocEx(hProcess, NULL, 12, MEM_COMMIT, PAGE_READWRITE);

                        if ((!plvitem)||(!p_MyItemText))
                                MessageBox(NULL,"无法分配内存!","错误!",NULL);
                        else
                        {
                                MessageBox(NULL,"本演示程序将更改TaskManager中第6个项目中第1列的内容。","提示",NULL);
                               
                                iItem=5;//5在这里是第六个(从零开始)
                                lvitem.iSubItem=0;//同上
                                lvitem.pszText=p_MyItemText;
                               
                                WriteProcessMemory(hProcess, p_MyItemText, &str_MyItemText, 12, NULL);
                                WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);
                                //向目标程序发送LVM_SETITEMTEXT消息
                                SendMessage(hwnd, LVM_SETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem);
                        }
                }
        }
       
        //释放内存
        CloseHandle(hwnd);
        CloseHandle(hProcess);
        VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE);
        VirtualFreeEx(hProcess, p_MyItemText, 0, MEM_RELEASE);
       
        return 0;
}

三、以上代码在Win2000P+SP4 + VC6+SP6测试通过。

源码可从我的个人主页下载。
http://timw.yeah.net
http://timw.126.com

编译,在Win2000下通过测试。

8

主题

239

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
发表于 2005-11-4 13:32:00 | 显示全部楼层

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

以前我没成功过,原来是要开个外存,汗。谢谢楼主
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 12:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表