下面的是我写的读listview的值为什么
nt下可以 98下或xp下如何做.怎么自动处理Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public 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
Public Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPublic Const PROCESS_VM_OPERATION = &H8
Public Const PROCESS_VM_READ = &H10
Public Const PROCESS_VM_WRITE = &H20
Public Const MEM_COMMIT = &H1000
Public Const PAGE_READWRITE = &H4&
Public Const LVM_FIRST = &H1000
Public Const LVM_GETITEMCOUNT = LVM_FIRST + 4
Public Const LVIF_TEXT = &H1
Public Const LVM_GETITEMTEXT = LVM_FIRST + 45
Public Const MEM_DECOMMIT = &H4000Public Type LV_ITEM
mask As Long
iItem As Long
iSubItem As Long
State As Long
stateMask As Long
pszText As Long
cchTextMax As Long
iImage As Long
lParam As Long
iIndent As Long
End TypePublic Function GetItem(MyHwnd As Long, MyCol As Integer, MyRow As Integer) As String
Dim dwProcessId As Long, hProcess As Long
Dim lpListItemRemote As Long, lpTextRemote As Long
Dim dwBytesRead As Long, dwBytesWrite As Long
Dim lvItemLocal As LV_ITEM
Dim bWriteOK As Long
Dim nMaxLen As Long
Dim GetItemCound As Long
Dim asItemText As String
nMaxLen = 1023
Dim szBuf() As Byte
ReDim szBuf(nMaxLen)
GetWindowThreadProcessId MyHwnd, dwProcessId
hProcess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, 0&, dwProcessId)
If hProcess <> 0 Then
lpTextRemote = VirtualAllocEx(ByVal hProcess, ByVal 0&, nMaxLen + 1, MEM_COMMIT, PAGE_READWRITE)
lpListItemRemote = VirtualAllocEx(ByVal hProcess, ByVal 0&, Len(lvItemLocal), MEM_COMMIT, PAGE_READWRITE)
bWriteOK = WriteProcessMemory(ByVal hProcess, ByVal lpTextRemote, szBuf(0), nMaxLen + 1, dwBytesWrite)
lvItemLocal.iItem = MyCol
lvItemLocal.iSubItem = MyRow - 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)
SendMessage MyHwnd, LVM_GETITEMTEXT, MyCol, ByVal lpListItemRemote
ReadProcessMemory ByVal hProcess, ByVal lpTextRemote, szBuf(0), nMaxLen + 1, dwBytesRead
GetItem = StrConv(LeftB(szBuf, InStrB(szBuf, ChrB(0)) - 1), vbUnicode)
VirtualFreeEx hProcess, ByVal lpTextRemote, 0, MEM_DECOMMIT
VirtualFreeEx hProcess, ByVal lpListItemRemote, 0, MEM_DECOMMIT
Else
GetItem = ""
End If
CloseHandle hProcess
End Function
nt下可以 98下或xp下如何做.怎么自动处理Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public 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
Public Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPublic Const PROCESS_VM_OPERATION = &H8
Public Const PROCESS_VM_READ = &H10
Public Const PROCESS_VM_WRITE = &H20
Public Const MEM_COMMIT = &H1000
Public Const PAGE_READWRITE = &H4&
Public Const LVM_FIRST = &H1000
Public Const LVM_GETITEMCOUNT = LVM_FIRST + 4
Public Const LVIF_TEXT = &H1
Public Const LVM_GETITEMTEXT = LVM_FIRST + 45
Public Const MEM_DECOMMIT = &H4000Public Type LV_ITEM
mask As Long
iItem As Long
iSubItem As Long
State As Long
stateMask As Long
pszText As Long
cchTextMax As Long
iImage As Long
lParam As Long
iIndent As Long
End TypePublic Function GetItem(MyHwnd As Long, MyCol As Integer, MyRow As Integer) As String
Dim dwProcessId As Long, hProcess As Long
Dim lpListItemRemote As Long, lpTextRemote As Long
Dim dwBytesRead As Long, dwBytesWrite As Long
Dim lvItemLocal As LV_ITEM
Dim bWriteOK As Long
Dim nMaxLen As Long
Dim GetItemCound As Long
Dim asItemText As String
nMaxLen = 1023
Dim szBuf() As Byte
ReDim szBuf(nMaxLen)
GetWindowThreadProcessId MyHwnd, dwProcessId
hProcess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, 0&, dwProcessId)
If hProcess <> 0 Then
lpTextRemote = VirtualAllocEx(ByVal hProcess, ByVal 0&, nMaxLen + 1, MEM_COMMIT, PAGE_READWRITE)
lpListItemRemote = VirtualAllocEx(ByVal hProcess, ByVal 0&, Len(lvItemLocal), MEM_COMMIT, PAGE_READWRITE)
bWriteOK = WriteProcessMemory(ByVal hProcess, ByVal lpTextRemote, szBuf(0), nMaxLen + 1, dwBytesWrite)
lvItemLocal.iItem = MyCol
lvItemLocal.iSubItem = MyRow - 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)
SendMessage MyHwnd, LVM_GETITEMTEXT, MyCol, ByVal lpListItemRemote
ReadProcessMemory ByVal hProcess, ByVal lpTextRemote, szBuf(0), nMaxLen + 1, dwBytesRead
GetItem = StrConv(LeftB(szBuf, InStrB(szBuf, ChrB(0)) - 1), vbUnicode)
VirtualFreeEx hProcess, ByVal lpTextRemote, 0, MEM_DECOMMIT
VirtualFreeEx hProcess, ByVal lpListItemRemote, 0, MEM_DECOMMIT
Else
GetItem = ""
End If
CloseHandle hProcess
End Function
但98的话应该还有其他办法实现的……