VB.net实现从ListView控件中异地获取文本内容源代码
生活随笔
收集整理的這篇文章主要介紹了
VB.net实现从ListView控件中异地获取文本内容源代码
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
對(duì)于一些VB6工程代碼來說,需要完成從VB到VB.net的轉(zhuǎn)換,在轉(zhuǎn)換過程中需要注意很多內(nèi)容,利用VB.net的直接轉(zhuǎn)換功能很少能完全成功,需要我們付出很大的努力。
下面的VB.net代碼實(shí)現(xiàn)從其他應(yīng)用程序中的ListView控件中異地獲取文本內(nèi)容,是從VB6的代碼中轉(zhuǎn)換而來,包括一些舊類型的轉(zhuǎn)換和數(shù)據(jù)類型聲明的變化。
view plaincopy to clipboardprint?
??2?Module?Module1???
??3?????Public?Structure?LV_ITEMA???
??4?????????Dim?mask?As?Integer??
??5?????????Dim?iItem?As?Integer??
??6?????????Dim?iSubItem?As?Integer??
??7?????????Dim?state?As?Integer??
??8?????????Dim?stateMask?As?Integer??
??9?????????Dim?pszText?As?Integer??
?10?????????Dim?cchTextMax?As?Integer??
?11?????????Dim?iImage?As?Integer??
?12?????????Dim?lParam?As?Integer??
?13?????????Dim?iIndent?As?Integer??
?14?????End?Structure??
?15?????'Constants???
?16?????Private?Const?LVFI_PARAM?=?1???
?17?????Private?Const?LVM_FIRST?=?&H1000???
?18?????Private?Const?LVM_FINDITEM?=?LVM_FIRST?+?13???
?19?????Private?Const?LVM_GETITEMTEXT?=?LVM_FIRST?+?45???
?20?????Private?Const?LVM_SORTITEMS?=?LVM_FIRST?+?48???
?21?????Private?Const?LVM_GETHEADER?=?LVM_FIRST?+?31???
?22?????Private?Const?LVM_GETITEMCOUNT?=?(LVM_FIRST?+?4)???
?23?????Private?Const?HDM_FIRST?=?&H1200?'//?Header?messages???
?24?????Private?Const?HDM_GETITEMCOUNT?=?(HDM_FIRST?+?0)???
?25?????Private?Const?HDM_ORDERTOINDEX?=?(HDM_FIRST?+?15)???
?26?????Private?Const?PROCESS_QUERY_INFORMATION?=?1024???
?27?????Private?Const?PROCESS_VM_OPERATION?=?&H8???
?28?????Private?Const?PROCESS_VM_READ?=?&H10???
?29?????Private?Const?PROCESS_VM_WRITE?=?&H20???
?30?????Private?Const?PROCESS_ALL_ACCESS?As?Long?=?&H1F0FFF???
?31?????Private?Const?STANDARD_RIGHTS_REQUIRED?=?&HF0000???
?32?????Private?Const?MAX_LVMSTRING?As?Integer?=?255?'可根椐讀取數(shù)據(jù)長(zhǎng)度設(shè)置適當(dāng)?shù)臄?shù)值???
?33?????Private?Const?MEM_COMMIT?=?&H1000???
?34?????Private?Const?MEM_RELEASE?=?&H8000???
?35?????Private?Const?PAGE_READWRITE?=?&H4???
?36?????Private?Const?LVIF_TEXT?As?Integer?=?&H1???
?37?????'API?declarations???
?38?????Private?Declare?Function?CloseHandle?Lib?"kernel32"?(ByVal?hObject?As?Integer)?As?Integer??
?39?????Private?Declare?Function?ReadProcessMemory?Lib?"kernel32"?(ByVal?hProcess?As?Integer,?ByVal?lpBaseAddress?As?Integer,?ByRef?lpBuffer?As?Byte,?ByVal?nSize?As?Integer,?ByVal?lpNumberOfBytesWritten?As?Integer)?As?Integer??
?40?????Private?Declare?Function?VirtualFreeEx?Lib?"kernel32"?(ByVal?hProcess?As?Integer,?ByVal?lpAddress?As?Integer,?ByVal?dwSize?As?Integer,?ByVal?dwFreeType?As?Integer)?As?Integer??
?41?????Private?Declare?Function?WriteProcessMemory?Lib?"kernel32"?(ByVal?hProcess?As?Integer,?ByVal?lpBaseAddress?As?Integer,?ByRef?lpBuffer?As?LV_ITEMA,?ByVal?nSize?As?Integer,?ByVal?lpNumberOfBytesWritten?As?Integer)?As?Integer??
?42?????Private?Declare?Function?VirtualAllocEx?Lib?"kernel32"?(ByVal?hProcess?As?Integer,?ByVal?lpAddress?As?Integer,?ByVal?dwSize?As?Integer,?ByVal?flAllocationType?As?Integer,?ByVal?flProtect?As?Integer)?As?Integer??
?43?????Private?Declare?Function?OpenProcess?Lib?"kernel32"?(ByVal?dwDesiredAccess?As?Integer,?ByVal?bInheritHandle?As?Integer,?ByVal?dwProcId?As?Integer)?As?Integer??
?44?????Private?Declare?Function?GetWindowThreadProcessId?Lib?"user32"?(ByVal?hwnd?As?Integer,?ByRef?lpdwProcessId?As?Integer)?As?Integer??
?45?????Private?Declare?Function?SendMessage?Lib?"user32"?Alias?"SendMessageA"?(ByVal?hwnd?As?Integer,?ByVal?wMsg?As?Integer,?ByVal?wParam?As?Integer,?ByVal?lParam?As?Integer)?As?Integer??
?46?????Public?Function?GetListviewItem(ByVal?hWindow?As?Integer,?ByVal?ProcessID?As?Integer,?ByVal?pColumn?As?Integer,?ByVal?pRow?As?Integer)?As?String??
?47?????????Dim?Result?As?Integer??
?48?????????Dim?myItem?As?LV_ITEMA???
?49?????????Dim?pHandle?As?Integer??
?50?????????Dim?pStrBufferMemory?As?Integer??
?51?????????Dim?pMyItemMemory?As?Integer??
?52?????????Dim?strBuffer()?As?Byte??
?53?????????Dim?Index?As?Integer??
?54?????????Dim?tmpString?As?String??
?55?????????Dim?strLength?As?Integer??
?56?????????'******************************???
?57?????????'為動(dòng)態(tài)數(shù)組變量重新分配存儲(chǔ)空間???
?58?????????'******************************???
?59?????????ReDim?strBuffer(MAX_LVMSTRING)???
?60?????????'*****************************************************************************************************???
?61?????????'打開一個(gè)現(xiàn)有進(jìn)程的句柄,返回值Long,如執(zhí)行成功,返回進(jìn)程句柄;零表示失敗。會(huì)設(shè)置GetLastError???
?62?????????'Public?Declare?Function?OpenProcess?Lib?"kernel32"?(ByVal?dwDesiredAccess?As?Long,?ByVal?bInheritHandle?As?Long,?ByVal?dwProcId?As?Long)?As?Long???
?63?????????'參數(shù)?類型及說明???
?64?????????'dwDesiredAccess?Long,指定這個(gè)句柄要求的訪問方法。指定API32.TXT文件中以PROCESS_???開頭的一個(gè)或多個(gè)常數(shù)???
?65?????????'bInheritHandle?Long,如句柄能夠由子進(jìn)程繼承,則為TRUE???
?66?????????'dwProcessId?Long,要打開那個(gè)進(jìn)程的進(jìn)程標(biāo)識(shí)符???
?67?????????'*****************************************************************************************************???
?68?????????pHandle?=?OpenProcess(PROCESS_ALL_ACCESS,?False,?ProcessID)???
?69?????????'*****************************************************************************************************???
?70?????????'VirtualAllocEx(目標(biāo)進(jìn)程的句柄,0,內(nèi)存區(qū)域的大小,分配類型,新分配內(nèi)存的存取保護(hù)類型)?返回所分配頁(yè)面的基址???
?71?????????'*****************************************************************************************************???
?72?????????pStrBufferMemory?=?VirtualAllocEx(pHandle,?0,?MAX_LVMSTRING,?MEM_COMMIT,?PAGE_READWRITE)???
?73?????????'*************************************************???
?74?????????'初始化LV_ITEM?結(jié)構(gòu)???
?75?????????'MyItem.iSubItem?列的索引號(hào)???
?76?????????'myItem.pszText?數(shù)據(jù)內(nèi)容(此處是一個(gè)分配的內(nèi)存地址)???
?77?????????'*************************************************???
?78?????????myItem.mask?=?LVIF_TEXT???
?79?????????myItem.iSubItem?=?pColumn???
?80?????????myItem.pszText?=?pStrBufferMemory???
?81?????????myItem.cchTextMax?=?MAX_LVMSTRING???
?82?????????'***********************************************************???
?83?????????'把這個(gè)結(jié)構(gòu)寫入遠(yuǎn)程進(jìn)程process's?存儲(chǔ)量???
?84?????????'WriteProcessMemory(目標(biāo)進(jìn)程的句柄,地址,寫入的數(shù)據(jù),字節(jié)數(shù),0)???
?85?????????'***********************************************************???
?86?????????pMyItemMemory?=?VirtualAllocEx(pHandle,?0,?Len(myItem),?MEM_COMMIT,?PAGE_READWRITE)???
?87?????????Result?=?WriteProcessMemory(pHandle,?pMyItemMemory,?(myItem),?Len(myItem),?0&)???
?88?????????'********************************???
?89?????????'發(fā)送消息,得到項(xiàng)目信息和寫入內(nèi)存???
?90?????????'********************************???
?91?????????strLength?=?SendMessage(hWindow,?LVM_GETITEMTEXT,?pRow,?pMyItemMemory)???
?92?????????Result?=?ReadProcessMemory(pHandle,?pStrBufferMemory,?strBuffer(0),?MAX_LVMSTRING,?0)???
?93?????????tmpString?=?System.Text.Encoding.Default.GetString(strBuffer).Trim???
?94?????????Result?=?ReadProcessMemory(pHandle,?pMyItemMemory,?myItem,?Len(myItem),?0)???
?95?????????'****************************???
?96?????????'釋放分配的內(nèi)存和關(guān)閉進(jìn)程句柄???
?97?????????'****************************???
?98?????????Result?=?VirtualFreeEx(pHandle,?pStrBufferMemory,?0,?MEM_RELEASE)???
?99?????????Result?=?VirtualFreeEx(pHandle,?pMyItemMemory,?0,?MEM_RELEASE)???
100?????????Result?=?CloseHandle(pHandle)???
101?????????If?Len(tmpString)?>?0?Then?GetListviewItem?=?tmpString???
102?????End?Function??
103?End?Module??
104?Option?Explicit?On?
105?Module?Module1
106?????Public?Structure?LV_ITEMA
107?????????Dim?mask?As?Integer
108?????????Dim?iItem?As?Integer
109?????????Dim?iSubItem?As?Integer
110?????????Dim?state?As?Integer
111?????????Dim?stateMask?As?Integer
112?????????Dim?pszText?As?Integer
113?????????Dim?cchTextMax?As?Integer
114?????????Dim?iImage?As?Integer
115?????????Dim?lParam?As?Integer
116?????????Dim?iIndent?As?Integer
117?????End?Structure
118?????'Constants
119?????Private?Const?LVFI_PARAM?=?1
120?????Private?Const?LVM_FIRST?=?&H1000
121?????Private?Const?LVM_FINDITEM?=?LVM_FIRST?+?13
122?????Private?Const?LVM_GETITEMTEXT?=?LVM_FIRST?+?45
123?????Private?Const?LVM_SORTITEMS?=?LVM_FIRST?+?48
124?????Private?Const?LVM_GETHEADER?=?LVM_FIRST?+?31
125?????Private?Const?LVM_GETITEMCOUNT?=?(LVM_FIRST?+?4)
126?????Private?Const?HDM_FIRST?=?&H1200?'//?Header?messages
127?????Private?Const?HDM_GETITEMCOUNT?=?(HDM_FIRST?+?0)
128?????Private?Const?HDM_ORDERTOINDEX?=?(HDM_FIRST?+?15)
129?????Private?Const?PROCESS_QUERY_INFORMATION?=?1024
130?????Private?Const?PROCESS_VM_OPERATION?=?&H8
131?????Private?Const?PROCESS_VM_READ?=?&H10
132?????Private?Const?PROCESS_VM_WRITE?=?&H20
133?????Private?Const?PROCESS_ALL_ACCESS?As?Long?=?&H1F0FFF
134?????Private?Const?STANDARD_RIGHTS_REQUIRED?=?&HF0000
135?????Private?Const?MAX_LVMSTRING?As?Integer?=?255?'可根椐讀取數(shù)據(jù)長(zhǎng)度設(shè)置適當(dāng)?shù)臄?shù)值
136?????Private?Const?MEM_COMMIT?=?&H1000
137?????Private?Const?MEM_RELEASE?=?&H8000
138?????Private?Const?PAGE_READWRITE?=?&H4
139?????Private?Const?LVIF_TEXT?As?Integer?=?&H1
140?????'API?declarations
141?????Private?Declare?Function?CloseHandle?Lib?"kernel32"?(ByVal?hObject?As?Integer)?As?Integer
142?????Private?Declare?Function?ReadProcessMemory?Lib?"kernel32"?(ByVal?hProcess?As?Integer,?ByVal?lpBaseAddress?As?Integer,?ByRef?lpBuffer?As?Byte,?ByVal?nSize?As?Integer,?ByVal?lpNumberOfBytesWritten?As?Integer)?As?Integer
143?????Private?Declare?Function?VirtualFreeEx?Lib?"kernel32"?(ByVal?hProcess?As?Integer,?ByVal?lpAddress?As?Integer,?ByVal?dwSize?As?Integer,?ByVal?dwFreeType?As?Integer)?As?Integer
144?????Private?Declare?Function?WriteProcessMemory?Lib?"kernel32"?(ByVal?hProcess?As?Integer,?ByVal?lpBaseAddress?As?Integer,?ByRef?lpBuffer?As?LV_ITEMA,?ByVal?nSize?As?Integer,?ByVal?lpNumberOfBytesWritten?As?Integer)?As?Integer
145?????Private?Declare?Function?VirtualAllocEx?Lib?"kernel32"?(ByVal?hProcess?As?Integer,?ByVal?lpAddress?As?Integer,?ByVal?dwSize?As?Integer,?ByVal?flAllocationType?As?Integer,?ByVal?flProtect?As?Integer)?As?Integer
146?????Private?Declare?Function?OpenProcess?Lib?"kernel32"?(ByVal?dwDesiredAccess?As?Integer,?ByVal?bInheritHandle?As?Integer,?ByVal?dwProcId?As?Integer)?As?Integer
147?????Private?Declare?Function?GetWindowThreadProcessId?Lib?"user32"?(ByVal?hwnd?As?Integer,?ByRef?lpdwProcessId?As?Integer)?As?Integer
148?????Private?Declare?Function?SendMessage?Lib?"user32"?Alias?"SendMessageA"?(ByVal?hwnd?As?Integer,?ByVal?wMsg?As?Integer,?ByVal?wParam?As?Integer,?ByVal?lParam?As?Integer)?As?Integer
149?????Public?Function?GetListviewItem(ByVal?hWindow?As?Integer,?ByVal?ProcessID?As?Integer,?ByVal?pColumn?As?Integer,?ByVal?pRow?As?Integer)?As?String
150?????????Dim?Result?As?Integer
151?????????Dim?myItem?As?LV_ITEMA
152?????????Dim?pHandle?As?Integer
153?????????Dim?pStrBufferMemory?As?Integer
154?????????Dim?pMyItemMemory?As?Integer
155?????????Dim?strBuffer()?As?Byte
156?????????Dim?Index?As?Integer
157?????????Dim?tmpString?As?String
158?????????Dim?strLength?As?Integer
159?????????'******************************
160?????????'為動(dòng)態(tài)數(shù)組變量重新分配存儲(chǔ)空間
161?????????'******************************
162?????????ReDim?strBuffer(MAX_LVMSTRING)
163?????????'*****************************************************************************************************
164?????????'打開一個(gè)現(xiàn)有進(jìn)程的句柄,返回值Long,如執(zhí)行成功,返回進(jìn)程句柄;零表示失敗。會(huì)設(shè)置GetLastError
165?????????'Public?Declare?Function?OpenProcess?Lib?"kernel32"?(ByVal?dwDesiredAccess?As?Long,?ByVal?bInheritHandle?As?Long,?ByVal?dwProcId?As?Long)?As?Long
166?????????'參數(shù)?類型及說明
167?????????'dwDesiredAccess?Long,指定這個(gè)句柄要求的訪問方法。指定API32.TXT文件中以PROCESS_???開頭的一個(gè)或多個(gè)常數(shù)
168?????????'bInheritHandle?Long,如句柄能夠由子進(jìn)程繼承,則為TRUE
169?????????'dwProcessId?Long,要打開那個(gè)進(jìn)程的進(jìn)程標(biāo)識(shí)符
170?????????'*****************************************************************************************************
171?????????pHandle?=?OpenProcess(PROCESS_ALL_ACCESS,?False,?ProcessID)
172?????????'*****************************************************************************************************
173?????????'VirtualAllocEx(目標(biāo)進(jìn)程的句柄,0,內(nèi)存區(qū)域的大小,分配類型,新分配內(nèi)存的存取保護(hù)類型)?返回所分配頁(yè)面的基址
174?????????'*****************************************************************************************************
175?????????pStrBufferMemory?=?VirtualAllocEx(pHandle,?0,?MAX_LVMSTRING,?MEM_COMMIT,?PAGE_READWRITE)
176?????????'*************************************************
177?????????'初始化LV_ITEM?結(jié)構(gòu)
178?????????'MyItem.iSubItem?列的索引號(hào)
179?????????'myItem.pszText?數(shù)據(jù)內(nèi)容(此處是一個(gè)分配的內(nèi)存地址)
180?????????'*************************************************
181?????????myItem.mask?=?LVIF_TEXT
182?????????myItem.iSubItem?=?pColumn
183?????????myItem.pszText?=?pStrBufferMemory
184?????????myItem.cchTextMax?=?MAX_LVMSTRING
185?????????'***********************************************************
186?????????'把這個(gè)結(jié)構(gòu)寫入遠(yuǎn)程進(jìn)程process's?存儲(chǔ)量
187?????????'WriteProcessMemory(目標(biāo)進(jìn)程的句柄,地址,寫入的數(shù)據(jù),字節(jié)數(shù),0)
188?????????'***********************************************************
189?????????pMyItemMemory?=?VirtualAllocEx(pHandle,?0,?Len(myItem),?MEM_COMMIT,?PAGE_READWRITE)
190?????????Result?=?WriteProcessMemory(pHandle,?pMyItemMemory,?(myItem),?Len(myItem),?0&)
191?????????'********************************
192?????????'發(fā)送消息,得到項(xiàng)目信息和寫入內(nèi)存
193?????????'********************************
194?????????strLength?=?SendMessage(hWindow,?LVM_GETITEMTEXT,?pRow,?pMyItemMemory)
195?????????Result?=?ReadProcessMemory(pHandle,?pStrBufferMemory,?strBuffer(0),?MAX_LVMSTRING,?0)
196?????????tmpString?=?System.Text.Encoding.Default.GetString(strBuffer).Trim
197?????????Result?=?ReadProcessMemory(pHandle,?pMyItemMemory,?myItem,?Len(myItem),?0)
198?????????'****************************
199?????????'釋放分配的內(nèi)存和關(guān)閉進(jìn)程句柄
200?????????'****************************
201?????????Result?=?VirtualFreeEx(pHandle,?pStrBufferMemory,?0,?MEM_RELEASE)
202?????????Result?=?VirtualFreeEx(pHandle,?pMyItemMemory,?0,?MEM_RELEASE)
203?????????Result?=?CloseHandle(pHandle)
204?????????If?Len(tmpString)?>?0?Then?GetListviewItem?=?tmpString
205?????End?Function
206?End?Module
?
?
實(shí)現(xiàn)轉(zhuǎn)換的過程其實(shí)就是一個(gè)按圖索驥的過程,按照VB.net豐富的運(yùn)行錯(cuò)誤信息提示,一步步的來完成。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/xxaxx/archive/2010/01/06/1640786.html
總結(jié)
以上是生活随笔為你收集整理的VB.net实现从ListView控件中异地获取文本内容源代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue引用electron_如何搞定跨平
- 下一篇: Python PycURL 网络编程