当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 如何更改其它程序 ListView 控件中某个 Item 的内容

VC++
简简单单:三个函数实现框架菜单自绘
如何更改其它程序 ListView 控件中某个 Item 的内容
构建仪表、图表控件的绘制框架
QQ2006 界面编程之鸡蛋里挑骨头
自动隐藏停泊窗体实现
WIN XP关机的特效实现
程序界面多模式显示
QQ界面的模拟实现(下)
QQ界面的模拟实现(上)
简易方法淡入淡出启动画面
如何选中其他程序ListView控件中的某个Item
用C#实现office2003风格的菜单组件
修改一个完全颜色的CListCtrl类
在你的程序中如何使用CButtonST类
用键盘操作静态链接打开应用程序中的URLs
完美实现真彩自绘菜单
创建客户区窗口,列表框之间项的拖拽操作
C-Visual Toolbar 1.0
MFC 应用程序中的菜单提示信息
位图进度条

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 78 ::
收藏到网摘: n/a

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

作者:天津/赵春生

下载源代码

一:程序说明

  这次我将介绍如何更改其他程序ListView控件中某个Item的内容,关于类似的拙文我已经写了两篇,这是第三篇,本篇和第一篇《如何向其他程序的 ListView 控件发送 LVM_GETITEMTEXT 消息》类似,区别在于:

  1. 发送的消息不同:前者是读取pszText的内容——发送LVM_GETITEMTEXT;这次是设置pszText,应该发送LVM_SETITEMTEXT;
  2. 字符串缓冲区的作用不同:前者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, &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);	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

其它文章:
  • 如何向其它程序的ListView控件发送LVM_GETITEMTEXT消息
  • 如何选中其它程序ListView控件中的某个Item