下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、向其他程序的 ListView 控件发送 LVM_GETITEMTEXT 一:问题的由来与解决方法:首先给大家介绍一个我编写的小程序 CallFI(Call FileInfo) ,他与 2K/XP 中的 taskmgr.exe(Windows TaskManager) 程序配合使 用。他能获取指定进程的路径并依此调用 FileInfo( 文件类型分析工具 ) 程序,这样你就能更加全面得了解这个进程了。当你选中一个进程并运行 CallFI后,CallFI首先向taskmgr.exe中的ListView 控件发送LVM_GETNEXTITEM息来确定你所选定的是 哪个index,然后再发送LVM_
2、GETITEMTEX消息获取相应的值(PID),以便根据该PID进行后面的一系列操作。index很顺利得就得到了, 但当我直接向ListView控件发送LVM_GETITEMTEXT息时却无法得到我想要的返回值!这就是本文所要解决的问题。在GOOGL上我找到了 Cory Nelson写的Stealing Program's Memory一文,问题的关键在于:利用WriteProcessMemory() 函数将LVITEM结构插入到目标进程中二:具体实践:#include<windows.h>#include<commctrl.h>int APIENTRY Win
3、Main(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)HWND hwnd;int iItem=0;LVITEM lvitem, *plvitem;char ItemBuf512,*pItem;DWORD PID;HANDLE hProcess;hwnd=FindWindow("#32770","Windows 任务管理器 "); hwnd=FindWindowEx(hwnd,0,"#32770",0);hwnd=FindWindowE
4、x(hwnd,0,"SysListView32",0);if (!hwnd)MessageBox(NULL,"Windows 任务管理器 尚未启动! "," 错误! ",NULL);elseiItem=SendMessage(hwnd,LVM_GETNEXTITEM,-1,LVNI_SELECTED);if (iItem=-1)MessageBox(NULL," 没有指定目标进程 ! "," 错误! ",NULL);else/itoa(iItem,temp,10);/MessageBox(NUL
5、L,temp,"iItem",NULL);GetWindowThreadProcessId(hwnd, &PID); hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID); if (!hProcess)MessageBox(NULL," 获取进程句柄操作失败! "," 错误! ",NULL);elseplvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE)
6、; pItem=(char*)VirtualAllocEx(hProcess, NULL, 512, MEM_COMMIT, PAGE_READWRITE);if (!plvitem)|(!pItem)MessageBox(NULL," 无法分配内存! "," 错误! ",NULL);elselvitem.cchTextMax=512;/lvitem.iSubItem=1;/PIDlvitem.iSubItem=0; /ProcessName lvitem.pszText=pItem;WriteProcessMemory(hProcess, plvite
7、m, &lvitem, sizeof(LVITEM), NULL); SendMessage(hwnd, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem); ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);MessageBox(NULL,ItemBuf,"ItemBuf",NULL);/ 释放内存CloseHandle(hwnd);CloseHandle(hProcess);VirtualFreeEx(hProcess, plvitem, 0, MEM_RE
8、LEASE);VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);return 0;向其他程序的 ListV iew 控件发送 LVM_GETITEMTEXT2:程序说明:这次我将介绍如何更改其他程序ListView控件中某个Item的内容,关于类似的拙文我已经写了两篇,这是第三篇,本篇和第一篇如何向其他程序的ListView控件发送LVMGETITEMTEXT息类似,区别在于:1,发送的消息不同:前者是读取pszText 的内容?D?D发送 LVM_GETITEMTEXT这次是设置 pszText,应该发送 LVM_SETITEMTEXT2,字符串缓
9、冲区的作用不同:前者pItem用来接收ITEMTEXT我们可以通过 ReadProcessMemory函数来读取其内容;而在本篇中p_MyltemText则用来存放我们要设置的ITEMTEXT并用WriteProcessMemory函数将其写入到目标程序中作为演示,下面的这段程序将更改TaskManager中第6个项目中第1列的内容。程序运行后的效果图:立件(E)选项直看甌帮肋凹应用程序进程|性能IQ 3映像名称CFUCFU时间内存便用i System Idle P.Systemwinlogoii,电皐色 csres.天津赵春生Evchost. exe086608 0 83 5 6 02011
10、12 2 49 0 0 0 10 0 0900000 0 094Q1210 0400000002-00000004 o o 06 o o o ooooooooK K K K K K K K6 2 8 4 2 2 8 4 1762-79062 3 6 2 2 0 1J J- J- J » 43413二:具体实践:#include<windows.h>#include<commctrl.h>int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCm
11、dShow)HWND hwnd;int iltem=0;LVITEM lvitem, *plvitem;DWORD PID;HANDLE hProcess;char *p_MyltemText;目标程序中用来存放 TEXT的地址/The pszText member is the pointer to a null-terminated/ string containing the new text; it can also be NULL./以上信息是从API手册中获得的,故在本例中字符串长度不能>=12,/以确保字符串后有 NULLchar str_MyltemText12=0;st
12、rcpy(str_MyltemText," 天津赵春生");hwnd=FindWindow("#32770","Windows 任务管理器”);hwnd=FindWindowEx(hwnd,0,"#32770",0);hwnd=FindWindowEx(hwnd,0,"SysListView32",0);if (!hwnd)MessageBox(NULL,"Windows 任务管理器尚未启动!",” 错误! ",NULL);elseGetWindowThreadProcess
13、ld(hwnd, & PID); hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID);if (!hProcess)MessageBox(NULL,"获取进程句柄操作失败!",”错误! ",NULL);elseplvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE); p_MyItemText=(char*)VirtualAllocEx(hProcess, NULL, 12, MEM_
14、COMMIT, PAGE_READWRITE);if (!plvitem)|(!p_MyItemText)MessageBox(NULL," 无法分配内存! "," 错误! ",NULL);elseMessageBox(NULL,"本演示程序将更改 TaskManager中第6个项目中第1列的内容。",”提示",NULL);iItem=5;/5 在这里是第六个(从零开始)lvitem.iSubItem=0;/ 同上lvitem.pszText=p_MyItemText;WriteProcessMemory(hProcess,
15、 p_MyItemText, &str_MyItemText, 12, NULL);WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);/向目标程序发送 LVM_SETITEMTEX消息SendMessage(hwnd, LVM_SETITEMTEXT, (WPARAM)iltem, (LPARAM)plvitem);/ 释放内存CloseHandle(hwnd);CloseHandle(hProcess);VirtualFreeEx(hProcess, plvitem, 0, MEM_REL
16、EASE);VirtualFreeEx(hProcess, p_MyItemText, 0, MEM_RELEASE);return 0;如何更改其他程序 ListView 控件中某个 Item 的内容4:程序说明:题目是一位网友在我留言板上的留言,不知道大家看没看过我曾经写过的如何向其他程序的 ListView 控件发送 LVM_GETITEMTEXT 消息一文?在那篇拙文中,我的目的是得到某一Item的TEXT于是我将LVITEM结构插入到了目标进程中,才使得目标进程正确响应LVMGETITEMTEXT 息。要得到某一 Item的TEXT需要发送LVM_GETITEMTEXT息,而要选中某
17、个 Item则要发送LVM_SETITEMSTAT消息: LVM_GETITEMTEXTwParam = (WPARAM) (int) iItem; lParam = (LPARAM) (LV_ITEM FAR *) pitem;LVM_SETITEMSTATEwParam = (WPARAM) (int) i;lParam = (LPARAM) (LV_ITEM FAR *) pitem;看到了吗?两个消息的参数一模一样!再来看看LV_ITEM结构的设置:只需将 state和stateMask设置成LVIS_SELECTED并指定iItem即可。直接修改上篇拙文中的代码就能轻松搞定本篇要解决
18、的问题。二:具体实践: #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; hwnd=FindWindow("#32770","Windows 任务管理器 "); hwn
19、d=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," 获取进程句柄操作失败!&qu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年安阳市滑县融媒体中心公开招聘10名新闻行业工作人员备考题库及一套答案详解
- 2026年国投钦州港口有限公司招聘备考题库及参考答案详解1套
- 2026年大专可报钟祥市国有企业招聘16人备考题库及参考答案详解
- 2026年嘉峪关市人民社区卫生服务中心招聘备考题库参考答案详解
- 2026年中国能源建设集团广东电力工程局有限公司招聘备考题库参考答案详解
- 2026年哈尔滨市平房区平房镇卫生院招聘医疗技术工作人员的备考题库及完整答案详解1套
- 2026年关于库尔勒梨城建设有限公司公开选聘副总经理的备考题库及答案详解一套
- 2026年吉安市吉水县两山资源控股有限公司面向社会公开招聘出纳的备考题库及一套答案详解
- 2026年安阳市卫生事业单位公开招聘(引进)992人备考题库参考答案详解
- 2026年国药控股系统纪检(巡察)人员公开招聘备考题库及一套完整答案详解
- 隐睾护理查房
- 施工企业奖惩管理办法
- 巡视人员奖惩管理办法
- 保洁员工5S管理
- 成人失禁相关性皮炎的预防与护理(2024年中华护理学会团体标准)
- 篮球裁判员手册(2人执裁与3人执裁2018年版)
- 早产儿脑室内出血预防专家共识(2025)解读
- 2025年中考道德与法治三轮冲刺:主观题常用答题术语速查宝典
- 论语的测试题及答案
- 教师年薪合同协议
- 地铁保护专项施工方案中建A3版面
评论
0/150
提交评论