现在网上找的这个只能获取文本?应该也 这个原理获取LVItem.iImage可是我就是找不到怎么获取啊?
uses CommCtrl; function ListView_GetItemText_Ex(hwndLV: HWND; i, iSubItem: Integer; 
pszText: PChar; cchTextMax: Integer): Integer; 
var 
LVItem: TLVItem; 
ProcessID, ProcessHD, Temp: DWORD; 
MemPoint: Pointer; 
begin 
GetWindowThreadProcessId(hwndLV, ProcessID); ProcessHD := OpenProcess( 
    PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, 
    FALSE, ProcessID); MemPoint := VirtualAllocEx(ProcessHD, nil, SizeOf(TLVItem) + cchTextMax, 
    MEM_COMMIT, PAGE_READWRITE); LVItem.iSubItem := iSubItem; 
LVItem.cchTextMax := cchTextMax; 
LVItem.pszText := PChar(Integer(MemPoint) + SizeOf(TLVItem)); 
    
WriteProcessMemory(ProcessHD, MemPoint, @LVItem, SizeOf(TLVItem), Temp); 
Result := SendMessage(hwndLV, LVM_GETITEMTEXT, i, Integer(MemPoint)); ReadProcessMemory(ProcessHD, Pointer(Integer(MemPoint) + SizeOf(TLVItem)), 
    pszText, cchTextMax, Temp); VirtualFreeEx(ProcessHD, MemPoint, SizeOf(TLVItem) + cchTextMax, MEM_DECOMMIT);   
VirtualFreeEx(ProcessHD, MemPoint, 0, MEM_RELEASE); 
end; procedure TForm1.Button1Click(Sender: TObject); 
var 
TextBuffer: array[0..100] of Char; 
begin 
ListView_GetItemText_Ex($01590346, 0, 0, TextBuffer, 100); 
ShowMessage(TextBuffer); 
end; 

解决方案 »

  1.   

    能否说下怎么获取索引我先试下啊?我自己对照它的这个改的不管用啊
    function ListView_GetItemText_Ex(hwndLV: HWND; i, iSubItem: Integer;
    base1:DWORD; cchTextMax: Integer): Integer;
    var 
    LVItem: TLVItem;
    ProcessID, ProcessHD, Temp: DWORD; 
    MemPoint: Pointer; 
    begin 
    GetWindowThreadProcessId(hwndLV, ProcessID); ProcessHD := OpenProcess( 
        PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, 
        FALSE, ProcessID); MemPoint := VirtualAllocEx(ProcessHD, nil, SizeOf(TLVItem) + cchTextMax, 
        MEM_COMMIT, PAGE_READWRITE); 
    LVItem.mask := LVIF_IMAGE+LVIF_TEXT;
    LVItem.iSubItem := iSubItem;
    LVItem.cchTextMax := cchTextMax;
    //LVItem.pszText := ;
    LVItem.iImage := Integer(MemPoint) + SizeOf(TLVItem) ;
    WriteProcessMemory(ProcessHD, MemPoint, @LVItem, SizeOf(TLVItem), Temp); 
    Result := SendMessage(hwndLV, LVM_GETITEMTEXT, i, Integer(MemPoint));ReadProcessMemory(ProcessHD,Pointer(Integer(MemPoint) + SizeOf(TLVItem)),Pointer(@base1),4,temp);//ReadProcessMemory(ProcessHD, Pointer(),pszText, cchTextMax, Temp);VirtualFreeEx(ProcessHD, MemPoint, SizeOf(TLVItem) + cchTextMax, MEM_DECOMMIT);
    VirtualFreeEx(ProcessHD, MemPoint, 0, MEM_RELEASE); 
    end;