Вниз
Скачать: CL | DM;

Вытащить текст из компонента, находящегося в другой программе   Найти похожие ветки 

 
Chaser ©   (2005-06-02 11:20) [0]

Подскажите, как вытащить текст из компонента, находящегося в другой программе ("TListBox" и "TListView").
С "TEdit" и "TMemo" все работает, а с этими почему то нет.

Код:

var
i: integer;
Wnd: hWnd;
WindowText: string;
TrayWnd, BtnWnd: hWnd; // для Button
Control: array [0..127] of char;
TxtLength, TxtLength1: integer;
buffer,bf: string;
begin
Wnd:=FindWindow(nil,PChar("Test");
if Wnd=0 then Exit;
Wnd:=GetWindow(Wnd,GW_CHILD);
GetClassName(Wnd,Control,SizeOf(Control));
// ищем нужный контрол
while Control<>"TListBox" do
 begin
  Wnd:=GetWindow(Wnd,GW_HWNDNEXT);
  GetClassName(Wnd,Control,SizeOf(Control));
  if Control="TListBox"
  then
   begin
    TxtLength:=SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
    TxtLength:=TxtLength+1;
    TxtLength1:=SendMessage(Wnd, LB_GETTEXTLEN, 0, 0);
    TxtLength1:=TxtLength1+1;
    SetLength(buffer, TxtLength);
    SetLength(bf, TxtLength1);
    SendMessage(Wnd,WM_GetText, TxtLength, longint(@buffer[1]));
    SendMessage(Wnd,LB_GetText, TxtLength1, longint(@bf[1]));
    Memo1.Text:=buffer;
    Memo1.Lines.Add(bf);
   end;
 end;
end;


 
Digitman ©   (2005-06-03 10:58) [1]


> С "TEdit" и "TMemo" все работает, а с этими почему то нет


и не будет работать, потому что буфер для приема текста листбокса должен быть в АП того процесса, которому принадлежит окно листбокса

- открой "чужой" процесс (OpenProcess) - получишь хэндл этого объекта,
- аллокируй в "чужом" АП буфер нужного размера (VirtualAllocEx) - получишь адрес этого "чужого" буфера,
- отправь "чужому" листбоксу сообщение LB_GetText, указав только что полученный тобой адрес "чужого" буфера
- скопируй содержимое "чужого" буфера в заранее подготовленный тобой "свой" буфер того же размера (ReadProcessMemory),
- уничтожь "чужой" буфер (VirtualFreeEx)
- закрой "чужой" процесс (CloseHandle)
- получи удовольствие)


 
Chaser ©   (2005-06-03 16:17) [2]

С ListBox"ом получилось,

SendMessage(Wnd,LB_GetText, 0, longint(@buffer_listbcom[1]));

теперь бы разобраться с TListView



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.031 c
14-1120728074
palva
2005-07-07 13:21
2005.07.31
Вопрос роялистам


1-1121143960
Rentgen
2005-07-12 08:52
2005.07.31
Не работает Click


1-1121088780
im-13
2005-07-11 17:33
2005.07.31
ошибка i/o при работе с браузером на delphi


4-1117696152
rolex
2005-06-02 11:09
2005.07.31
Как получить путь к папке Documents and Settings ???


11-1103720327
ECM
2004-12-22 15:58
2005.07.31
FAQ от Gandalf-a (KOL.MASTAK.RU)




   Наверх