Вниз
Скачать: 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.023 c
1-1120900326
KyRo
2005-07-09 13:12
2005.07.31
Случайное число


14-1120654675
netnt
2005-07-06 16:57
2005.07.31
Есть ли такая программа?


6-1114148067
marcel
2005-04-22 09:34
2005.07.31
Автоматическое обновление компонентов ПО


14-1120815627
Macrodens
2005-07-08 13:40
2005.07.31
Кто знает, где можно скачать


6-1113976979
Alex_C
2005-04-20 10:02
2005.07.31
idHTTP и https запрос?




   Наверх