22.02.2015, 09:04
|
|
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;
__________________
Пишу программы за еду.
__________________
|