Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.31;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.081 c
14-1121146213
Ega23
2005-07-12 09:30
2005.07.31
С днем рождения! 12 июля


1-1120974311
Tab
2005-07-10 09:45
2005.07.31
чтение unicode строк из ini файлов


4-1116487085
Fedor
2005-05-19 11:18
2005.07.31
ошибка "Отказано в доступе" при вызове CreateOleObject( xxx )


14-1120986439
NewWonder
2005-07-10 13:07
2005.07.31
Как сделать счётчик скачиваний файла?


1-1121101074
-virus-
2005-07-11 20:57
2005.07.31
помогите, проблема с файлом.