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

2016-01-29 12:10 54 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

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

作者:天津/赵春生

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

下载源代码

一:程序说明

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)发送的消息不同:前者是读取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, &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

来源:http://www.tulaoshi.com/n/20160129/1484922.html

延伸阅读
动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。 一、创建动态控件: 为了对照,我们先来看一下静态控件的创建。 放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件...
标签: 电脑入门
在使用Windows 7系统时,双击某些文件后,出现关联程序错误的问题,该如何解决?有时在安装某些软件后,它们会自动更改文件关联,而你更习惯旧的文件关联。出现这些情况,如何轻松更换?我们来看一下Windows 7更改关联程序的操作步骤。 1.浏览想要更改关联的文件位置 2.右键点击文件,找到打开方式,在弹出的窗口左侧选择选择默认程序。 ...
Visual Basic中的文本框控件允许用户在其中键入文本,以便在 程序中使用。相反, 程序员可能会希望显示一些文本但不希望用户编 辑该文本。本文介绍了如何创建只读的文本框控件的内容。 使一个文本框控件只读 在Visual Basic中,如果文本框控件的MultiLine属性设置为True ,文本将会自动地换行到下一行。另外,如果文本框控件的ScrollB...
标签: 电脑入门
方法一:另存为 使用福昕PDF阅读器打开pdf文件,选择菜单栏文件中的另存为按钮,保存格式选择为.txt,点击保存按钮即可。如下图所示。 打开保存的txt文件,你就可以方便的进行复制黏贴了。 方法二:使用选择文本 点击选择文本按钮,鼠标指针就会变成选定文本状态,这时就可以在pdf文件中选择内容。选择想要复制的文字后,右击选择...
    世界之大,真是无其不有。Windows 应用程序的GUI标准明确规定了 ListView 栏目头(Column Header)的宽度必须是可调整的,这本来是专门为用户考虑而设计的控制特性,可是偏偏就有用户拒绝这样的特性。作为技术人员,用户的需求是很难拒绝的。 尽管这明显是一种“非典型性需求”。本文将通过一个实例来示范如何实现 ListView C...

经验教程

449

收藏

74
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部