Function GetItemText(ByVal lhWnd As Long, ByVal lItemIndex As Long) As String
Dim mhwnd As Long
mhwnd = lhWnd
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 lItemIndex As Long
lItemIndex = lItemIndex
Dim sItemText As String
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 = lItemIndex
'lvItemLocal.iSubItem = 0
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)
Call VirtualFreeEx(hProcess, ByVal lpListItemRemote, 0, MEM_DECOMMIT)
Call VirtualFreeEx(hProcess, ByVal lpTextRemote, 0, MEM_DECOMMIT)
End If
CloseHandle hProcess
'*************** 显示结果
sItemText = StrConv(LeftB(szBuf, InStrB(szBuf, ChrB(0))), vbUnicode)
'*************** 显示结果
GetItemText = sItemText
End Function
******************************************************************
我改的C#的
******************************************************************
private void button1_Click(object sender, System.EventArgs e)
{
LV_ITEM lvItemLocal = new LV_ITEM();
int mnMaxLen = 1024;
int dwBytesWrite = 0;
int lpListItemRemote = 0;
int lpTextRemote = 0;
byte[] szBuf = new byte[mnMaxLen];int dwProcessId = 0;
Form1.GetWindowThreadProcessId(listHwnd,ref dwProcessId);int mhProcess = Form1.OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, dwProcessId);if(mhProcess != 0)
{
lpTextRemote = VirtualAllocEx(mhProcess, 0, mnMaxLen, MEM_COMMIT, PAGE_READWRITE);lpListItemRemote = VirtualAllocEx(mhProcess, 0, Marshal.SizeOf(typeof(LV_ITEM)) , MEM_COMMIT, PAGE_READWRITE);lvItemLocal.iItem = 0;
//lvItemLocal.iSubItem = 0
lvItemLocal.mask = LVIF_TEXT;
lvItemLocal.cchTextMax = mnMaxLen-1;
lvItemLocal.pszText = lpTextRemote;
int bWriteOK = WriteProcessMemory(mhProcess, ref lpListItemRemote, ref lvItemLocal, Marshal.SizeOf(typeof(LV_ITEM)), ref dwBytesWrite);int i = SendMessage(listHwnd, LVM_GETITEMTEXT, 0, ref lpListItemRemote);
}
}
Dim mhwnd As Long
mhwnd = lhWnd
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 lItemIndex As Long
lItemIndex = lItemIndex
Dim sItemText As String
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 = lItemIndex
'lvItemLocal.iSubItem = 0
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)
Call VirtualFreeEx(hProcess, ByVal lpListItemRemote, 0, MEM_DECOMMIT)
Call VirtualFreeEx(hProcess, ByVal lpTextRemote, 0, MEM_DECOMMIT)
End If
CloseHandle hProcess
'*************** 显示结果
sItemText = StrConv(LeftB(szBuf, InStrB(szBuf, ChrB(0))), vbUnicode)
'*************** 显示结果
GetItemText = sItemText
End Function
******************************************************************
我改的C#的
******************************************************************
private void button1_Click(object sender, System.EventArgs e)
{
LV_ITEM lvItemLocal = new LV_ITEM();
int mnMaxLen = 1024;
int dwBytesWrite = 0;
int lpListItemRemote = 0;
int lpTextRemote = 0;
byte[] szBuf = new byte[mnMaxLen];int dwProcessId = 0;
Form1.GetWindowThreadProcessId(listHwnd,ref dwProcessId);int mhProcess = Form1.OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, dwProcessId);if(mhProcess != 0)
{
lpTextRemote = VirtualAllocEx(mhProcess, 0, mnMaxLen, MEM_COMMIT, PAGE_READWRITE);lpListItemRemote = VirtualAllocEx(mhProcess, 0, Marshal.SizeOf(typeof(LV_ITEM)) , MEM_COMMIT, PAGE_READWRITE);lvItemLocal.iItem = 0;
//lvItemLocal.iSubItem = 0
lvItemLocal.mask = LVIF_TEXT;
lvItemLocal.cchTextMax = mnMaxLen-1;
lvItemLocal.pszText = lpTextRemote;
int bWriteOK = WriteProcessMemory(mhProcess, ref lpListItemRemote, ref lvItemLocal, Marshal.SizeOf(typeof(LV_ITEM)), ref dwBytesWrite);int i = SendMessage(listHwnd, LVM_GETITEMTEXT, 0, ref lpListItemRemote);
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货