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);
}
}