![向其他程序的ListView控件發(fā)送LVMGETITEMTEXT_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/4/2f2686e6-2d7d-4caa-975b-ac1974831250/2f2686e6-2d7d-4caa-975b-ac19748312501.gif)
![向其他程序的ListView控件發(fā)送LVMGETITEMTEXT_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/4/2f2686e6-2d7d-4caa-975b-ac1974831250/2f2686e6-2d7d-4caa-975b-ac19748312502.gif)
![向其他程序的ListView控件發(fā)送LVMGETITEMTEXT_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/4/2f2686e6-2d7d-4caa-975b-ac1974831250/2f2686e6-2d7d-4caa-975b-ac19748312503.gif)
![向其他程序的ListView控件發(fā)送LVMGETITEMTEXT_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/4/2f2686e6-2d7d-4caa-975b-ac1974831250/2f2686e6-2d7d-4caa-975b-ac19748312504.gif)
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、向其他程序的 ListView 控件發(fā)送 LVM_GETITEMTEXT 一:問題的由來與解決方法:首先給大家介紹一個我編寫的小程序 CallFI(Call FileInfo) ,他與 2K/XP 中的 taskmgr.exe(Windows TaskManager) 程序配合使 用。他能獲取指定進程的路徑并依此調用 FileInfo( 文件類型分析工具 ) 程序,這樣你就能更加全面得了解這個進程了。當你選中一個進程并運行 CallFI后,CallFI首先向taskmgr.exe中的ListView 控件發(fā)送LVM_GETNEXTITEM息來確定你所選定的是 哪個index,然后再發(fā)送LVM_
2、GETITEMTEX消息獲取相應的值(PID),以便根據(jù)該PID進行后面的一系列操作。index很順利得就得到了, 但當我直接向ListView控件發(fā)送LVM_GETITEMTEXT息時卻無法得到我想要的返回值!這就是本文所要解決的問題。在GOOGL上我找到了 Cory Nelson寫的Stealing Program's Memory一文,問題的關鍵在于:利用WriteProcessMemory() 函數(shù)將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 控件發(fā)送 LVM_GETITEMTEXT2:程序說明:這次我將介紹如何更改其他程序ListView控件中某個Item的內容,關于類似的拙文我已經寫了兩篇,這是第三篇,本篇和第一篇如何向其他程序的ListView控件發(fā)送LVMGETITEMTEXT息類似,區(qū)別在于:1,發(fā)送的消息不同:前者是讀取pszText 的內容?D?D發(fā)送 LVM_GETITEMTEXT這次是設置 pszText,應該發(fā)送 LVM_SETITEMTEXT2,字符串緩
9、沖區(qū)的作用不同:前者pItem用來接收ITEMTEXT我們可以通過 ReadProcessMemory函數(shù)來讀取其內容;而在本篇中p_MyltemText則用來存放我們要設置的ITEMTEXT并用WriteProcessMemory函數(shù)將其寫入到目標程序中作為演示,下面的這段程序將更改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);/向目標程序發(fā)送 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 控件發(fā)送 LVM_GETITEMTEXT 消息一文?在那篇拙文中,我的目的是得到某一Item的TEXT于是我將LVITEM結構插入到了目標進程中,才使得目標進程正確響應LVMGETITEMTEXT 息。要得到某一 Item的TEXT需要發(fā)送LVM_GETITEMTEXT息,而要選中某
17、個 Item則要發(fā)送LVM_SETITEMSTAT消息: LVM_GETITEMTEXTwParam = (WPARAM) (int) iItem; lParam = (LPARAM) (LV_ITEM FAR *) pitem;LVM_SETITEMSTATEwParam = (WPARAM) (int) i;lParam = (LPARAM) (LV_ITEM FAR *) pitem;看到了嗎?兩個消息的參數(shù)一模一樣!再來看看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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 乙肝患者購買合同范本
- 2025年度人工智能與制造業(yè)融合項目合同補充協(xié)議示范文本
- 保羅皮爾斯合同范本
- 出賣公司合同范本
- 買房銀行抵押合同范本
- 2025年度海鮮餐飲連鎖門店食材供應合同
- 兔寶寶合同范本
- 上門做飯創(chuàng)業(yè)計劃書國家層面
- 供氣標準合同范本
- 工程量清單及招標控制價編制方案
- 納龍心電說明書
- 2023湖北成人學位英語考試真題及答案1
- 《大數(shù)據(jù)金融》教學大綱(第六學期)附課程考核標準
- 物業(yè)管理企業(yè)用工風險與防范對策
- 拜耳法氧化鋁生產工藝流程框圖
- 零售藥店處方藥銷售自查整改報告word(范文)
- 叉車日常維護保養(yǎng)檢查記錄表
- 心源性休克的護理.ppt課件
- 精品解析:2022年黑龍江省哈爾濱市中考語文試題(原卷版)
- 單位事故隱患排查治理制度及臺賬
評論
0/150
提交評論