Показать сообщение отдельно
  #6  
Старый 22.02.2015, 09:04
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

ну не я же буду в чужом коде разбираться, правильно?

Код:
procedure TFormMain.FillListView(hListView: THandle);
var
  ProcessId: DWORD;
  hProcess: DWORD;
  ItemCount: Integer;
  i: Integer;
  BufItem: PChar;
  data: array [0..MAX_PATH-1] of Char;
  BufText: PChar;
  LVItem: TLVItem;
  dummy: Cardinal;
  APoint: TPoint;
  itm: TListItem;
begin
  GetWindowThreadProcessId(hListView, ProcessId);
  hProcess:=OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
  try
    ItemCount:=ListView_GetItemCount(hListView);
    for i:=0 to ItemCount-1 do
    begin
      BufItem:=VirtualAllocEx(hProcess, nil, SizeOf(TLVItem)+Length(data), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
      try
        BufText:=BufItem;
        Inc(BufText, SizeOf(TLVItem));
        ZeroMemory(@LVItem, SizeOf(TLVItem));
        LVItem.mask:=LVIF_TEXT or LVIF_IMAGE;
        LVItem.iItem:=i;
        LVItem.pszText:=BufText;
        LVItem.cchTextMax:=Length(data);
        WriteProcessMemory(hProcess, BufItem, @LVItem, SizeOf(TLVItem), dummy);
        SendMessage(hListView, LVM_GETITEM, i, LPARAM(BufItem));
        ReadProcessMemory(hProcess, BufItem, @LVItem, SizeOf(TLVItem), dummy);
        ReadProcessMemory(hProcess, BufText, @data[0], Length(data), dummy);
        SendMessage(hListView, LVM_GETITEMPOSITION, i, LPARAM(BufText));
        ReadProcessMemory(hProcess, BufText, @APoint, SizeOf(TPoint), dummy);
        itm:=ListView.Items.Add;
        itm.Caption:=StrPas(@data[0]);
        itm.SetPosition(APoint);
      finally
        VirtualFreeEx(hProcess, BufItem, 0, MEM_RELEASE);
      end;
    end;
  finally
    CloseHandle(hProcess);
  end;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием