Private Sub Command1_Click()
Dim mhwnd As Long
mhwnd = 1705642 '这是我的句柄 ^_^
Dim i As Long, s As String
Dim dwProcessId As Long, hProcess As Long
Dim dwBytesRead As Long, dwBytesWrite As Long
Dim bSuccess As Long
Call GetWindowThreadProcessId(mhwnd, dwProcessId)
Dim lpListItemRemote As Long, lpTextRemote As Long
Dim nMaxLen As Long
nMaxLen = 1023
Dim szBuf() As Byte
ReDim szBuf(nMaxLen)
Dim lvItemLocal As LV_ITEM
Dim bWriteOK As Long
Dim lItemCount As Long, lItemIndex As Long, lSubItemIndex As Long
Dim asItemText() As String
lItemCount = ListView_GetItemCount(mhwnd)
If lItemCount > 0 Then
ReDim asItemText(lItemCount - 1)
End If
lSubItemIndex = 1 '取得第几栏的文本
For lItemIndex = 0 To lItemCount - 1
lvItemLocal.iItem = lItemIndex
lvItemLocal.iSubItem = lSubItemIndex - 1
lvItemLocal.mask = LVIF_TEXT
lvItemLocal.cchTextMax = nMaxLen
lvItemLocal.pszText = lpTextRemote
dwBytesWrite = 0
bWriteOK = WriteProcessMemory(ByVal hProcess, ByVal lpListItemRemote, ByVal VarPtr(lvItemLocal), Len(lvItemLocal), dwBytesWrite)
i = SendMessage(mhwnd, LVM_GETITEMTEXT, lItemIndex, ByVal lpListItemRemote)
bSuccess = ReadProcessMemory(ByVal hProcess, ByVal lpTextRemote, szBuf(0), nMaxLen + 1, dwBytesRead)
asItemText(lItemIndex) = StrConv(LeftB(szBuf, InStrB(szBuf, ChrB(0)) - 1), vbUnicode)
Next
Call VirtualFreeEx(hProcess, ByVal lpListItemRemote, 0, MEM_DECOMMIT)
Call VirtualFreeEx(hProcess, ByVal lpListItemRemote, 0, MEM_DECOMMIT)
SaveToFile asItemText()
End If
CloseHandle hProcess
End Sub
Sub SaveToFile(asItemText() As String)
Dim lFreeFile As Long, i As Long
lFreeFile = FreeFile
Open "c:\ip.txt" For Output As #lFreeFile
For i = 0 To UBound(asItemText)
Print #lFreeFile, asItemText(i)
Next
Close #lFreeFile
End Sub
Function ListView_GetItemCount(ByVal hWnd As Long) As Long
ListView_GetItemCount = SendMessage(hWnd, LVM_GETITEMCOUNT, 0, ByVal 0&)
End Function