當前位置:
首頁 >
获取其他进程中ListView的文本
發布時間:2025/7/14
20
豆豆
生活随笔
收集整理的這篇文章主要介紹了
获取其他进程中ListView的文本
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
看到前面有朋友求相關代碼,就發出來了~~~
更改其他程序ListView控件中某個Item的內容(原碼) 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?'可根椐讀取數據長度設置適當的數值
?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?任務管理器")?'獲取任務管理器窗口句柄
?64?????lngHwnd1?=?FindWindowEx(lngHwnd1,?0,?"#32770",?"")?'獲取選項卡句柄
?65?????lngHwnd?=?FindWindowEx(lngHwnd1,?0,?"SysListView32",?"進程")?'獲取進程列表框句柄
?66?????Debug.Print?lngHwnd
?67?????
?68?????lngHeaderHwnd?=?SendMessage(lngHwnd,?LVM_GETHEADER,?0,?0)?'獲取ListView表頭句柄
?69?????lngRows?=?SendMessage(lngHwnd,?LVM_GETITEMCOUNT,?0,?0)?'獲取ListView項目數
?70?????
?71?????If?lngHeaderHwnd?>?0?Then
?72?????????lngCols?=?SendMessage(lngHeaderHwnd,?HDM_GETITEMCOUNT,?0,?0)?'獲取ListView表頭項目數
?73?????Else
?74?????????lngCols?=?1
?75?????End?If
?76?????GetWindowThreadProcessId?lngHwnd,?lngPId?'獲取與指定窗口關聯在一起的一個進程和線程標識符
?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?????'為動態數組變量重新分配存儲空間
?99?????'******************************
100?????ReDim?strBuffer(MAX_LVMSTRING)
101?
102?????'*****************************************************************************************************
103?????'打開一個現有進程的句柄,返回值Long,如執行成功,返回進程句柄;零表示失敗。會設置GetLastError
104?????'Public?Declare?Function?OpenProcess?Lib?"kernel32"?(ByVal?dwDesiredAccess?As?Long,?ByVal?bInheritHandle?As?Long,?ByVal?dwProcId?As?Long)?As?Long
105?????'參數?類型及說明
106?????'dwDesiredAccess?Long,指定這個句柄要求的訪問方法。指定API32.TXT文件中以PROCESS_???開頭的一個或多個常數
107?????'bInheritHandle?Long,如句柄能夠由子進程繼承,則為TRUE
108?????'dwProcessId?Long,要打開那個進程的進程標識符
109?????'*****************************************************************************************************
110?????pHandle?=?OpenProcess(PROCESS_VM_OPERATION?Or?PROCESS_VM_READ?Or?PROCESS_VM_WRITE,?False,?ProcessID)
111?
112?????'*****************************************************************************************************
113?????'VirtualAllocEx(目標進程的句柄,0,內存區域的大小,分配類型,新分配內存的存取保護類型)返回所分配頁面的基址
114?????'*****************************************************************************************************
115?????pStrBufferMemory?=?VirtualAllocEx(pHandle,?0,?MAX_LVMSTRING,?MEM_COMMIT,?PAGE_READWRITE)
116?
117?????'*************************************************
118?????'初始化LV_ITEM?結構
119?????'MyItem.iSubItem?列的索引號
120?????'myItem.pszText?數據內容(此處是一個分配的內存地址)
121?????'*************************************************
122?????myItem.mask?=?LVIF_TEXT
123?????myItem.iSubItem?=?pColumn
124?????myItem.pszText?=?pStrBufferMemory
125?????myItem.cchTextMax?=?MAX_LVMSTRING
126?
127?????'***********************************************************
128?????'把這個結構寫入遠程進程process's?存儲量
129?????'WriteProcessMemory(目標進程的句柄,地址,寫入的數據,字節數,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?????'發送消息,得到項目信息和寫入內存
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?????'把字節列陣變成串和送回它
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?????'釋放分配的內存和關閉進程句柄
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?
?
?
?
說明下,如果是頻繁讀取數據或數據項比較多時,請把內存分配和釋放的相關代碼分離出來,以免引起被讀取數據的程序出錯和占用內存不斷加大。如果哪位朋友有修改其它程序ListView數據的代碼也請發出來!
轉載于:https://www.cnblogs.com/xxaxx/archive/2010/01/06/1640788.html
總結
以上是生活随笔為你收集整理的获取其他进程中ListView的文本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DataList编辑、更新、取消、删除、
- 下一篇: CISS.SideMenu的bug