1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > VB.net实现从ListView控件中异地获取文本内容源代码

VB.net实现从ListView控件中异地获取文本内容源代码

时间:2019-12-15 21:30:33

相关推荐

VB.net实现从ListView控件中异地获取文本内容源代码

对于一些VB6工程代码来说,需要完成从VB到的转换,在转换过程中需要注意很多内容,利用的直接转换功能很少能完全成功,需要我们付出很大的努力。

下面的代码实现从其他应用程序中的ListView控件中异地获取文本内容,是从VB6的代码中转换而来,包括一些旧类型的转换和数据类型声明的变化。

view plaincopy to clipboardprint?

1OptionExplicitOn

2ModuleModule1

3PublicStructureLV_ITEMA

4DimmaskAsInteger

5DimiItemAsInteger

6DimiSubItemAsInteger

7DimstateAsInteger

8DimstateMaskAsInteger

9DimpszTextAsInteger

10DimcchTextMaxAsInteger

11DimiImageAsInteger

12DimlParamAsInteger

13DimiIndentAsInteger

14EndStructure

15'Constants

16PrivateConstLVFI_PARAM=1

17PrivateConstLVM_FIRST=&H1000

18PrivateConstLVM_FINDITEM=LVM_FIRST+13

19PrivateConstLVM_GETITEMTEXT=LVM_FIRST+45

20PrivateConstLVM_SORTITEMS=LVM_FIRST+48

21PrivateConstLVM_GETHEADER=LVM_FIRST+31

22PrivateConstLVM_GETITEMCOUNT=(LVM_FIRST+4)

23PrivateConstHDM_FIRST=&H1200'//Headermessages

24PrivateConstHDM_GETITEMCOUNT=(HDM_FIRST+0)

25PrivateConstHDM_ORDERTOINDEX=(HDM_FIRST+15)

26PrivateConstPROCESS_QUERY_INFORMATION=1024

27PrivateConstPROCESS_VM_OPERATION=&H8

28PrivateConstPROCESS_VM_READ=&H10

29PrivateConstPROCESS_VM_WRITE=&H20

30PrivateConstPROCESS_ALL_ACCESSAsLong=&H1F0FFF

31PrivateConstSTANDARD_RIGHTS_REQUIRED=&HF0000

32PrivateConstMAX_LVMSTRINGAsInteger=255'可根椐读取数据长度设置适当的数值

33PrivateConstMEM_COMMIT=&H1000

34PrivateConstMEM_RELEASE=&H8000

35PrivateConstPAGE_READWRITE=&H4

36PrivateConstLVIF_TEXTAsInteger=&H1

37'APIdeclarations

38PrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsInteger)AsInteger

39PrivateDeclareFunctionReadProcessMemoryLib"kernel32"(ByValhProcessAsInteger,ByVallpBaseAddressAsInteger,ByReflpBufferAsByte,ByValnSizeAsInteger,ByVallpNumberOfBytesWrittenAsInteger)AsInteger

40PrivateDeclareFunctionVirtualFreeExLib"kernel32"(ByValhProcessAsInteger,ByVallpAddressAsInteger,ByValdwSizeAsInteger,ByValdwFreeTypeAsInteger)AsInteger

41PrivateDeclareFunctionWriteProcessMemoryLib"kernel32"(ByValhProcessAsInteger,ByVallpBaseAddressAsInteger,ByReflpBufferAsLV_ITEMA,ByValnSizeAsInteger,ByVallpNumberOfBytesWrittenAsInteger)AsInteger

42PrivateDeclareFunctionVirtualAllocExLib"kernel32"(ByValhProcessAsInteger,ByVallpAddressAsInteger,ByValdwSizeAsInteger,ByValflAllocationTypeAsInteger,ByValflProtectAsInteger)AsInteger

43PrivateDeclareFunctionOpenProcessLib"kernel32"(ByValdwDesiredAccessAsInteger,ByValbInheritHandleAsInteger,ByValdwProcIdAsInteger)AsInteger

44PrivateDeclareFunctionGetWindowThreadProcessIdLib"user32"(ByValhwndAsInteger,ByReflpdwProcessIdAsInteger)AsInteger

45PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsInteger,ByValwMsgAsInteger,ByValwParamAsInteger,ByVallParamAsInteger)AsInteger

46PublicFunctionGetListviewItem(ByValhWindowAsInteger,ByValProcessIDAsInteger,ByValpColumnAsInteger,ByValpRowAsInteger)AsString

47DimResultAsInteger

48DimmyItemAsLV_ITEMA

49DimpHandleAsInteger

50DimpStrBufferMemoryAsInteger

51DimpMyItemMemoryAsInteger

52DimstrBuffer()AsByte

53DimIndexAsInteger

54DimtmpStringAsString

55DimstrLengthAsInteger

56'******************************

57'为动态数组变量重新分配存储空间

58'******************************

59ReDimstrBuffer(MAX_LVMSTRING)

60'*****************************************************************************************************

61'打开一个现有进程的句柄,返回值Long,如执行成功,返回进程句柄;零表示失败。会设置GetLastError

62'PublicDeclareFunctionOpenProcessLib"kernel32"(ByValdwDesiredAccessAsLong,ByValbInheritHandleAsLong,ByValdwProcIdAsLong)AsLong

63'参数类型及说明

64'dwDesiredAccessLong,指定这个句柄要求的访问方法。指定API32.TXT文件中以PROCESS_???开头的一个或多个常数

65'bInheritHandleLong,如句柄能够由子进程继承,则为TRUE

66'dwProcessIdLong,要打开那个进程的进程标识符

67'*****************************************************************************************************

68pHandle=OpenProcess(PROCESS_ALL_ACCESS,False,ProcessID)

69'*****************************************************************************************************

70'VirtualAllocEx(目标进程的句柄,0,内存区域的大小,分配类型,新分配内存的存取保护类型)返回所分配页面的基址

71'*****************************************************************************************************

72pStrBufferMemory=VirtualAllocEx(pHandle,0,MAX_LVMSTRING,MEM_COMMIT,PAGE_READWRITE)

73'*************************************************

74'初始化LV_ITEM结构

75'MyItem.iSubItem列的索引号

76'myItem.pszText数据内容(此处是一个分配的内存地址)

77'*************************************************

78myItem.mask=LVIF_TEXT

79myItem.iSubItem=pColumn

80myItem.pszText=pStrBufferMemory

hTextMax=MAX_LVMSTRING

82'***********************************************************

83'把这个结构写入远程进程process's存储量

84'WriteProcessMemory(目标进程的句柄,地址,写入的数据,字节数,0)

85'***********************************************************

86pMyItemMemory=VirtualAllocEx(pHandle,0,Len(myItem),MEM_COMMIT,PAGE_READWRITE)

87Result=WriteProcessMemory(pHandle,pMyItemMemory,(myItem),Len(myItem),0&)

88'********************************

89'发送消息,得到项目信息和写入内存

90'********************************

91strLength=SendMessage(hWindow,LVM_GETITEMTEXT,pRow,pMyItemMemory)

92Result=ReadProcessMemory(pHandle,pStrBufferMemory,strBuffer(0),MAX_LVMSTRING,0)

93tmpString=System.Text.Encoding.Default.GetString(strBuffer).Trim

94Result=ReadProcessMemory(pHandle,pMyItemMemory,myItem,Len(myItem),0)

95'****************************

96'释放分配的内存和关闭进程句柄

97'****************************

98Result=VirtualFreeEx(pHandle,pStrBufferMemory,0,MEM_RELEASE)

99Result=VirtualFreeEx(pHandle,pMyItemMemory,0,MEM_RELEASE)

100Result=CloseHandle(pHandle)

101IfLen(tmpString)>0ThenGetListviewItem=tmpString

102EndFunction

103EndModule

104OptionExplicitOn

105ModuleModule1

106PublicStructureLV_ITEMA

107DimmaskAsInteger

108DimiItemAsInteger

109DimiSubItemAsInteger

110DimstateAsInteger

111DimstateMaskAsInteger

112DimpszTextAsInteger

113DimcchTextMaxAsInteger

114DimiImageAsInteger

115DimlParamAsInteger

116DimiIndentAsInteger

117EndStructure

118'Constants

119PrivateConstLVFI_PARAM=1

120PrivateConstLVM_FIRST=&H1000

121PrivateConstLVM_FINDITEM=LVM_FIRST+13

122PrivateConstLVM_GETITEMTEXT=LVM_FIRST+45

123PrivateConstLVM_SORTITEMS=LVM_FIRST+48

124PrivateConstLVM_GETHEADER=LVM_FIRST+31

125PrivateConstLVM_GETITEMCOUNT=(LVM_FIRST+4)

126PrivateConstHDM_FIRST=&H1200'//Headermessages

127PrivateConstHDM_GETITEMCOUNT=(HDM_FIRST+0)

128PrivateConstHDM_ORDERTOINDEX=(HDM_FIRST+15)

129PrivateConstPROCESS_QUERY_INFORMATION=1024

130PrivateConstPROCESS_VM_OPERATION=&H8

131PrivateConstPROCESS_VM_READ=&H10

132PrivateConstPROCESS_VM_WRITE=&H20

133PrivateConstPROCESS_ALL_ACCESSAsLong=&H1F0FFF

134PrivateConstSTANDARD_RIGHTS_REQUIRED=&HF0000

135PrivateConstMAX_LVMSTRINGAsInteger=255'可根椐读取数据长度设置适当的数值

136PrivateConstMEM_COMMIT=&H1000

137PrivateConstMEM_RELEASE=&H8000

138PrivateConstPAGE_READWRITE=&H4

139PrivateConstLVIF_TEXTAsInteger=&H1

140'APIdeclarations

141PrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsInteger)AsInteger

142PrivateDeclareFunctionReadProcessMemoryLib"kernel32"(ByValhProcessAsInteger,ByVallpBaseAddressAsInteger,ByReflpBufferAsByte,ByValnSizeAsInteger,ByVallpNumberOfBytesWrittenAsInteger)AsInteger

143PrivateDeclareFunctionVirtualFreeExLib"kernel32"(ByValhProcessAsInteger,ByVallpAddressAsInteger,ByValdwSizeAsInteger,ByValdwFreeTypeAsInteger)AsInteger

144PrivateDeclareFunctionWriteProcessMemoryLib"kernel32"(ByValhProcessAsInteger,ByVallpBaseAddressAsInteger,ByReflpBufferAsLV_ITEMA,ByValnSizeAsInteger,ByVallpNumberOfBytesWrittenAsInteger)AsInteger

145PrivateDeclareFunctionVirtualAllocExLib"kernel32"(ByValhProcessAsInteger,ByVallpAddressAsInteger,ByValdwSizeAsInteger,ByValflAllocationTypeAsInteger,ByValflProtectAsInteger)AsInteger

146PrivateDeclareFunctionOpenProcessLib"kernel32"(ByValdwDesiredAccessAsInteger,ByValbInheritHandleAsInteger,ByValdwProcIdAsInteger)AsInteger

147PrivateDeclareFunctionGetWindowThreadProcessIdLib"user32"(ByValhwndAsInteger,ByReflpdwProcessIdAsInteger)AsInteger

148PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsInteger,ByValwMsgAsInteger,ByValwParamAsInteger,ByVallParamAsInteger)AsInteger

149PublicFunctionGetListviewItem(ByValhWindowAsInteger,ByValProcessIDAsInteger,ByValpColumnAsInteger,ByValpRowAsInteger)AsString

150DimResultAsInteger

151DimmyItemAsLV_ITEMA

152DimpHandleAsInteger

153DimpStrBufferMemoryAsInteger

154DimpMyItemMemoryAsInteger

155DimstrBuffer()AsByte

156DimIndexAsInteger

157DimtmpStringAsString

158DimstrLengthAsInteger

159'******************************

160'为动态数组变量重新分配存储空间

161'******************************

162ReDimstrBuffer(MAX_LVMSTRING)

163'*****************************************************************************************************

164'打开一个现有进程的句柄,返回值Long,如执行成功,返回进程句柄;零表示失败。会设置GetLastError

165'PublicDeclareFunctionOpenProcessLib"kernel32"(ByValdwDesiredAccessAsLong,ByValbInheritHandleAsLong,ByValdwProcIdAsLong)AsLong

166'参数类型及说明

167'dwDesiredAccessLong,指定这个句柄要求的访问方法。指定API32.TXT文件中以PROCESS_???开头的一个或多个常数

168'bInheritHandleLong,如句柄能够由子进程继承,则为TRUE

169'dwProcessIdLong,要打开那个进程的进程标识符

170'*****************************************************************************************************

171pHandle=OpenProcess(PROCESS_ALL_ACCESS,False,ProcessID)

172'*****************************************************************************************************

173'VirtualAllocEx(目标进程的句柄,0,内存区域的大小,分配类型,新分配内存的存取保护类型)返回所分配页面的基址

174'*****************************************************************************************************

175pStrBufferMemory=VirtualAllocEx(pHandle,0,MAX_LVMSTRING,MEM_COMMIT,PAGE_READWRITE)

176'*************************************************

177'初始化LV_ITEM结构

178'MyItem.iSubItem列的索引号

179'myItem.pszText数据内容(此处是一个分配的内存地址)

180'*************************************************

181myItem.mask=LVIF_TEXT

182myItem.iSubItem=pColumn

183myItem.pszText=pStrBufferMemory

hTextMax=MAX_LVMSTRING

185'***********************************************************

186'把这个结构写入远程进程process's存储量

187'WriteProcessMemory(目标进程的句柄,地址,写入的数据,字节数,0)

188'***********************************************************

189pMyItemMemory=VirtualAllocEx(pHandle,0,Len(myItem),MEM_COMMIT,PAGE_READWRITE)

190Result=WriteProcessMemory(pHandle,pMyItemMemory,(myItem),Len(myItem),0&)

191'********************************

192'发送消息,得到项目信息和写入内存

193'********************************

194strLength=SendMessage(hWindow,LVM_GETITEMTEXT,pRow,pMyItemMemory)

195Result=ReadProcessMemory(pHandle,pStrBufferMemory,strBuffer(0),MAX_LVMSTRING,0)

196tmpString=System.Text.Encoding.Default.GetString(strBuffer).Trim

197Result=ReadProcessMemory(pHandle,pMyItemMemory,myItem,Len(myItem),0)

198'****************************

199'释放分配的内存和关闭进程句柄

200'****************************

201Result=VirtualFreeEx(pHandle,pStrBufferMemory,0,MEM_RELEASE)

202Result=VirtualFreeEx(pHandle,pMyItemMemory,0,MEM_RELEASE)

203Result=CloseHandle(pHandle)

204IfLen(tmpString)>0ThenGetListviewItem=tmpString

205EndFunction

206EndModule

实现转换的过程其实就是一个按图索骥的过程,按照丰富的运行错误信息提示,一步步的来完成。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。