Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

получение данных из чужого TListView   Найти похожие ветки 

 
landy   (2004-10-29 18:49) [0]

Как можно получить данные из чужого объекта ListView в чужом окне? Хендл самого окна я знаю, как получить, через FindWindowEx, а как добраться до данных, которые лежат в колонках ListView?


 
VMcL ©   (2004-10-29 19:03) [1]

>>landy  (29.10.04 18:49)

Внедриться в нужный процесс с помощью SetWindowsHookEx или CreateRemoteThread, например.


 
VMcL ©   (2004-10-29 19:05) [2]

P.S. Почитать от том, как это сделать, можно здесь:
http://podgoretsky.com/ftp/Docs/Classics/Richter/


 
landy   (2004-11-01 16:48) [3]

Отыскал вот такой код одного китайского товарища, который делает все, что мне нужно. Просветился. :)

http://dev.csdn.net/Develop/article/26/26046.shtm

(*//
±кМв:»сИЎЖдЛыЅшіМЦРListViewµДОД±ѕ
ЛµГч:Window2000+Delphi6µчКФНЁ№э
ЙијЖ:Zswang
Ц§іЦ:wjhu111@21cn.com
ИХЖЪ:2004-03-25
//*)

uses CommCtrl;

function ListViewColumnCount(mHandle: THandle): Integer;
begin
 Result := Header_GetItemCount(ListView_GetHeader(mHandle));
end; { ListViewColumnCount }

function GetListViewText(mHandle: THandle; mStrings: TStrings): Boolean;
var
 vColumnCount: Integer;
 vItemCount: Integer;
 I, J: Integer;
 vBuffer: array[0..255] of Char;
 vProcessId: DWORD;
 vProcess: THandle;
 vPointer: Pointer;
 vNumberOfBytesRead: Cardinal;
 S: string;
 vItem: TLVItem;
begin
 Result := False;
 if not Assigned(mStrings) then Exit;
 vColumnCount := ListViewColumnCount(mHandle);
 if vColumnCount <= 0 then Exit;
 vItemCount := ListView_GetItemCount(mHandle);
 GetWindowThreadProcessId(mHandle, @vProcessId);
 vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or
   PROCESS_VM_WRITE, False, vProcessId);
 vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT,
   PAGE_READWRITE);
 mStrings.BeginUpdate;
 try
   mStrings.Clear;
   for I := 0 to vItemCount - 1 do begin
     S := "";
     for J := 0 to vColumnCount - 1 do begin
       with vItem do begin
         mask := LVIF_TEXT;
         iItem := I;
         iSubItem := J;
         cchTextMax := SizeOf(vBuffer);
         pszText := Pointer(Cardinal(vPointer) + SizeOf(TLVItem));
       end;
       WriteProcessMemory(vProcess, vPointer, @vItem,
         SizeOf(TLVItem), vNumberOfBytesRead);
       SendMessage(mHandle, LVM_GETITEM, I, lparam(vPointer));
       ReadProcessMemory(vProcess, Pointer(Cardinal(vPointer) + SizeOf(TLVItem)),
         @vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead);
       S := S + #9 + vBuffer;
     end;
     Delete(S, 1, 1);
     mStrings.Add(S);
   end;
 finally
   VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
   CloseHandle(vProcess);
   mStrings.EndUpdate;
 end;
 Result := True;
end; { GetListViewText }

//Example
procedure TForm1.FormCreate(Sender: TObject);
begin
 RegisterHotKey(Handle, 1, MOD_WIN, VK_F2);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 UnRegisterHotKey(Handle, 1);
end;

procedure TForm1.WMHOTKEY(var Msg: TWMHOTKEY);
begin
 case Msg.HotKey of
   1:
     GetListViewText(
       WindowFromPoint(Point(Mouse.CursorPos.X, Mouse.CursorPos.Y)),
       MemoText.Lines);
 end;
end;



Страницы: 1 вся ветка

Текущий архив: 2004.12.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
1-1102019486
AlexHawk
2004-12-02 23:31
2004.12.19
Помогите с циклом...


3-1100863113
Тень отца Гамлета
2004-11-19 14:18
2004.12.19
Какие параметры указать в транзакции, если нужно


1-1102320665
tytus
2004-12-06 11:11
2004.12.19
Как проверить ввод символа в TEdit?


14-1101725572
Dok_3D
2004-11-29 13:52
2004.12.19
Юлия Тимошенко: Жанна д Арк или подстрекатель, ищущий корысть?


14-1101956224
Думкин
2004-12-02 05:57
2004.12.19
С днем рождения! 2 декабря