Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

получение данных из чужого 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.051 c
3-1100854084
Lamer_Of_Delphi
2004-11-19 11:48
2004.12.19
Хранимая проца...


3-1100872553
Dionnis
2004-11-19 16:55
2004.12.19
Поиск по базе ...


1-1101876349
Vladik
2004-12-01 07:45
2004.12.19
Наследование форм и свойства в инспекторе объектов


4-1099589075
Wiz@rd
2004-11-04 20:24
2004.12.19
Координаты меню


14-1101378246
MrCorp
2004-11-25 13:24
2004.12.19
Задача с числами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский