Главная страница
    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.07 c
4-1099669839
XProger
2004-11-05 18:50
2004.12.19
ClientRect


3-1100700425
Александр_
2004-11-17 17:07
2004.12.19
Как узнать о результате выполнения запроса в InterBase?


14-1101437102
Думкин
2004-11-26 05:45
2004.12.19
С днем рождения! 26 ноября


3-1100693899
Denmin
2004-11-17 15:18
2004.12.19
Как подменить значение нажатой клавиши?


1-1101906743
Змей
2004-12-01 16:12
2004.12.19
colordialog





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский