获取其他进程中ListView的文本
生活随笔
收集整理的這篇文章主要介紹了
获取其他进程中ListView的文本
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
看到前面有朋友求相關(guān)代碼,就發(fā)出來了~~~
更改其他程序ListView控件中某個Item的內(nèi)容(原碼) http://www.vbgood.com/viewthread.php?tid=72897
?
?
??1?Option?Explicit??2?
??3?Private?Const?LVM_FIRST?=?&H1000
??4?Private?Const?LVM_GETITEMCOUNT?=?(LVM_FIRST?+?4)
??5?
??6?Private?Const?LVM_GETITEM?=?(LVM_FIRST?+?5)
??7?Private?Const?LVM_GETSTRINGWIDTH?=?(LVM_FIRST?+?17)
??8?Private?Const?LVM_GETCOLUMN?=?(LVM_FIRST?+?25)
??9?Private?Const?LVM_GETITEMTEXT?=?(LVM_FIRST?+?45)
?10?Private?Const?LVM_GETHEADER?=?LVM_FIRST?+?31
?11?Private?Const?WC_HEADERA?=?"SysHeader32"
?12?Private?Const?WC_HEADER?=?WC_HEADERA
?13?Private?Const?HDM_FIRST?=?&H1200?'//?Header?messages
?14?Private?Const?HDM_GETITEMCOUNT?=?(HDM_FIRST?+?0)
?15?Private?Const?HDM_ORDERTOINDEX?=?(HDM_FIRST?+?15)
?16?
?17?Private?Const?PROCESS_QUERY_INFORMATION?=?1024
?18?Private?Const?PROCESS_VM_OPERATION?=?&H8
?19?Private?Const?PROCESS_VM_READ?=?&H10
?20?Private?Const?PROCESS_VM_WRITE?=?&H20
?21?Private?Const?STANDARD_RIGHTS_REQUIRED?=?&HF0000
?22?Private?Const?MAX_LVMSTRING?As?Long?=?255?'可根椐讀取數(shù)據(jù)長度設(shè)置適當(dāng)?shù)臄?shù)值
?23?Private?Const?MEM_COMMIT?=?&H1000
?24?Private?Const?MEM_RELEASE?=?&H8000
?25?Private?Const?PAGE_READWRITE?=?&H4
?26?Private?Const?LVIF_TEXT?As?Long?=?&H1
?27?
?28?Private?Type?LV_ITEMA
?29?????mask?As?Long
?30?????iItem?As?Long
?31?????iSubItem?As?Long
?32?????state?As?Long
?33?????stateMask?As?Long
?34?????pszText?As?Long
?35?????cchTextMax?As?Long
?36?????iImage?As?Long
?37?????lParam?As?Long
?38?????iIndent?As?Long
?39?End?Type
?40?
?41?Private?Declare?Function?OpenProcess?Lib?"kernel32"?(ByVal?dwDesiredAccess?As?Long,?ByVal?bInheritHandle?As?Long,?ByVal?dwProcId?As?Long)?As?Long
?42?Private?Declare?Function?VirtualAllocEx?Lib?"kernel32"?(ByVal?hProcess?As?Long,?ByVal?lpAddress?As?Long,?ByVal?dwSize?As?Long,?ByVal?flAllocationType?As?Long,?ByVal?flProtect?As?Long)?As?Long
?43?Private?Declare?Function?VirtualFreeEx?Lib?"kernel32"?(ByVal?hProcess?As?Long,?ByVal?lpAddress?As?Long,?ByVal?dwSize?As?Long,?ByVal?dwFreeType?As?Long)?As?Long
?44?Private?Declare?Function?WriteProcessMemory?Lib?"kernel32"?(ByVal?hProcess?As?Long,?ByVal?lpBaseAddress?As?Any,?ByRef?lpBuffer?As?Any,?ByVal?nSize?As?Long,?lpNumberOfBytesWritten?As?Long)?As?Long
?45?Private?Declare?Function?ReadProcessMemory?Lib?"kernel32"?(ByVal?hProcess?As?Long,?ByVal?lpBaseAddress?As?Any,?ByRef?lpBuffer?As?Any,?ByVal?nSize?As?Long,?lpNumberOfBytesWritten?As?Long)?As?Long
?46?Private?Declare?Function?SendMessage?Lib?"user32"?Alias?"SendMessageA"?(ByVal?hwnd?As?Long,?ByVal?wMsg?As?Long,?ByVal?wParam?As?Long,?ByRef?lParam?As?Any)?As?Long
?47?Private?Declare?Function?CloseHandle?Lib?"kernel32"?(ByVal?hObject?As?Long)?As?Long
?48?Private?Declare?Function?GetWindowThreadProcessId?Lib?"user32"?(ByVal?hwnd?As?Long,?lpdwProcessId?As?Long)?As?Long
?49?Private?Declare?Function?FindWindow?Lib?"user32"?Alias?"FindWindowA"?(ByVal?lpClassName?As?String,?ByVal?lpWindowName?As?String)?As?Long
?50?Private?Declare?Function?FindWindowEx?Lib?"user32"?Alias?"FindWindowExA"?(ByVal?hWnd1?As?Long,?ByVal?hWnd2?As?Long,?ByVal?lpsz1?As?String,?ByVal?lpsz2?As?String)?As?Long
?51?
?52?Private?Sub?Command1_Click()
?53?????Dim?lngHwnd?As?Long
?54?????Dim?lngHwnd1?As?Long
?55?????Dim?lngHeaderHwnd?As?Long
?56?????Dim?lngPId?As?Long
?57?????Dim?lngRows?As?Long
?58?????Dim?lngCols?As?Long
?59?????Dim?lngRow?As?Long
?60?????Dim?lngCol?As?Long
?61?????Dim?strItem?As?String
?62?
?63?????lngHwnd1?=?FindWindow(vbNullString,?"Windows?任務(wù)管理器")?'獲取任務(wù)管理器窗口句柄
?64?????lngHwnd1?=?FindWindowEx(lngHwnd1,?0,?"#32770",?"")?'獲取選項(xiàng)卡句柄
?65?????lngHwnd?=?FindWindowEx(lngHwnd1,?0,?"SysListView32",?"進(jìn)程")?'獲取進(jìn)程列表框句柄
?66?????Debug.Print?lngHwnd
?67?????
?68?????lngHeaderHwnd?=?SendMessage(lngHwnd,?LVM_GETHEADER,?0,?0)?'獲取ListView表頭句柄
?69?????lngRows?=?SendMessage(lngHwnd,?LVM_GETITEMCOUNT,?0,?0)?'獲取ListView項(xiàng)目數(shù)
?70?????
?71?????If?lngHeaderHwnd?>?0?Then
?72?????????lngCols?=?SendMessage(lngHeaderHwnd,?HDM_GETITEMCOUNT,?0,?0)?'獲取ListView表頭項(xiàng)目數(shù)
?73?????Else
?74?????????lngCols?=?1
?75?????End?If
?76?????GetWindowThreadProcessId?lngHwnd,?lngPId?'獲取與指定窗口關(guān)聯(lián)在一起的一個進(jìn)程和線程標(biāo)識符
?77?????For?lngRow?=?0?To?lngRows?-?1
?78?????????strItem?=?""
?79?????????For?lngCol?=?0?To?lngCols?-?1
?80?????????????strItem?=?strItem?&?vbTab?&?GetListviewItem(lngHwnd,?lngPId,?lngCol,?lngRow)
?81?????????Next
?82?????????Debug.Print?strItem
?83?????Next
?84?End?Sub
?85?
?86?Public?Function?GetListviewItem(ByVal?hWindow?As?Long,?ByVal?ProcessID?As?Long,?ByVal?pColumn?As?Long,?ByVal?pRow?As?Long)?As?String
?87?????Dim?Result?As?Long
?88?????Dim?myItem?As?LV_ITEMA
?89?????Dim?pHandle?As?Long
?90?????Dim?pStrBufferMemory?As?Long
?91?????Dim?pMyItemMemory?As?Long
?92?????Dim?strBuffer()?As?Byte
?93?????Dim?Index?As?Long
?94?????Dim?tmpString?As?String
?95?????Dim?strLength?As?Long
?96?
?97?????'******************************
?98?????'為動態(tài)數(shù)組變量重新分配存儲空間
?99?????'******************************
100?????ReDim?strBuffer(MAX_LVMSTRING)
101?
102?????'*****************************************************************************************************
103?????'打開一個現(xiàn)有進(jìn)程的句柄,返回值Long,如執(zhí)行成功,返回進(jìn)程句柄;零表示失敗。會設(shè)置GetLastError
104?????'Public?Declare?Function?OpenProcess?Lib?"kernel32"?(ByVal?dwDesiredAccess?As?Long,?ByVal?bInheritHandle?As?Long,?ByVal?dwProcId?As?Long)?As?Long
105?????'參數(shù)?類型及說明
106?????'dwDesiredAccess?Long,指定這個句柄要求的訪問方法。指定API32.TXT文件中以PROCESS_???開頭的一個或多個常數(shù)
107?????'bInheritHandle?Long,如句柄能夠由子進(jìn)程繼承,則為TRUE
108?????'dwProcessId?Long,要打開那個進(jìn)程的進(jìn)程標(biāo)識符
109?????'*****************************************************************************************************
110?????pHandle?=?OpenProcess(PROCESS_VM_OPERATION?Or?PROCESS_VM_READ?Or?PROCESS_VM_WRITE,?False,?ProcessID)
111?
112?????'*****************************************************************************************************
113?????'VirtualAllocEx(目標(biāo)進(jìn)程的句柄,0,內(nèi)存區(qū)域的大小,分配類型,新分配內(nèi)存的存取保護(hù)類型)返回所分配頁面的基址
114?????'*****************************************************************************************************
115?????pStrBufferMemory?=?VirtualAllocEx(pHandle,?0,?MAX_LVMSTRING,?MEM_COMMIT,?PAGE_READWRITE)
116?
117?????'*************************************************
118?????'初始化LV_ITEM?結(jié)構(gòu)
119?????'MyItem.iSubItem?列的索引號
120?????'myItem.pszText?數(shù)據(jù)內(nèi)容(此處是一個分配的內(nèi)存地址)
121?????'*************************************************
122?????myItem.mask?=?LVIF_TEXT
123?????myItem.iSubItem?=?pColumn
124?????myItem.pszText?=?pStrBufferMemory
125?????myItem.cchTextMax?=?MAX_LVMSTRING
126?
127?????'***********************************************************
128?????'把這個結(jié)構(gòu)寫入遠(yuǎn)程進(jìn)程process's?存儲量
129?????'WriteProcessMemory(目標(biāo)進(jìn)程的句柄,地址,寫入的數(shù)據(jù),字節(jié)數(shù),0)
130?????'***********************************************************
131?????pMyItemMemory?=?VirtualAllocEx(pHandle,?0,?Len(myItem),?MEM_COMMIT,?PAGE_READWRITE)
132?????Result?=?WriteProcessMemory(pHandle,?pMyItemMemory,?myItem,?Len(myItem),?0)
133?
134?????'********************************
135?????'發(fā)送消息,得到項(xiàng)目信息和寫入內(nèi)存
136?????'********************************
137?????Result?=?SendMessage(hWindow,?LVM_GETITEMTEXT,?pRow,?ByVal?pMyItemMemory)
138?????Result?=?ReadProcessMemory(pHandle,?pStrBufferMemory,?strBuffer(0),?MAX_LVMSTRING,?0)
139?????Result?=?ReadProcessMemory(pHandle,?pMyItemMemory,?myItem,?Len(myItem),?0)
140?
141?????'************************
142?????'把字節(jié)列陣變成串和送回它
143?????'************************
144?
145?????tmpString?=?StrConv(strBuffer,?vbUnicode)
146?????If?InStr(tmpString,?Chr$(0))?>?0?Then
147?????????tmpString?=?Left$(tmpString,?InStr(tmpString,?Chr$(0))?-?1)
148?????End?If
149?
150?????tmpString?=?Trim$(tmpString)
151?
152?????'****************************
153?????'釋放分配的內(nèi)存和關(guān)閉進(jìn)程句柄
154?????'****************************
155?????Result?=?VirtualFreeEx(pHandle,?pStrBufferMemory,?0,?MEM_RELEASE)
156?????Result?=?VirtualFreeEx(pHandle,?pMyItemMemory,?0,?MEM_RELEASE)
157?
158?????Result?=?CloseHandle(pHandle)
159?
160?????If?Len(tmpString)?>?0?Then?GetListviewItem?=?tmpString
161?
162?End?Function
163?
?
?
?
說明下,如果是頻繁讀取數(shù)據(jù)或數(shù)據(jù)項(xiàng)比較多時,請把內(nèi)存分配和釋放的相關(guān)代碼分離出來,以免引起被讀取數(shù)據(jù)的程序出錯和占用內(nèi)存不斷加大。如果哪位朋友有修改其它程序ListView數(shù)據(jù)的代碼也請發(fā)出來!
轉(zhuǎn)載于:https://www.cnblogs.com/xxaxx/archive/2010/01/06/1640788.html
總結(jié)
以上是生活随笔為你收集整理的获取其他进程中ListView的文本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DataList编辑、更新、取消、删除、
- 下一篇: CISS.SideMenu的bug