Получение текста из дочернего окна стороннего приложения
От: bands  
Дата: 28.01.10 23:04
Оценка:
Здравствуйте!
Подскажите, кто знает, в таком вопросе:

получил хэндлер окна, перебрал все хэндлеры дочерних окон, ни одно не дало мне текст (пробовал GetWindowText и SendMessage с пометкой WM_GETTEXT)

А вообще НЕОБХОДИМО вытащить текст из строки состояния приложения

Вот, что я ещё выяснил:
Строка состояния класса V8CommandLine


Помогите, пжлта! Заранее спасибо!
С уважением, Сергей!

Код процедуры

function EnumChildProc(_handle: hwnd; LPARAM: dword):BOOL;stdcall;
var
  Nm: array[0..255] of Char;
  Cs: array[0..255] of Char;
  h : THandle;
  ss : ansistring;
  l : integer;
begin
  GetWindowText(_handle, Nm, 255); // Текст из окна
  GetClassName(_handle, Cs, 255); // Имя класса окна
  Form1.ListBox2.Items.Add(String(Nm)+' / '+String(Cs)); 
  SetLength( ss, 100 );
  ss:= '';
  h:= _handle;
  l := SendMessage(h, WM_GETTEXT, 1000, lparam(@ss[1]));   // Проба получения текст с пом sendMessage с пометкой WM_GETTEXT
  Form1.ListBox2.Items.Add(ss);    // добавление строки в лист
  EnumChildWindows(_handle, @EnumChildProc, 0);  
  EnumChildProc := True;
end;


http://files.rsdn.ru/91080/1.JPG <--- Здесь то, что нужно вытащить представлено наглядно
http://files.rsdn.ru/91080/%d0%9f%d1%80%d0%b8%d0%bc%d0%b5%d1%80_%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d0%be%d0%bd%d0%bd%d1%8b_2.rar <----- Здесь приложение, которое на данный момент у меня получилось
Re: Получение текста из дочернего окна стороннего приложения
От: CEMb  
Дата: 29.01.10 04:09
Оценка:
Здравствуйте, bands, Вы писали:

B>Здравствуйте!

B>Подскажите, кто знает, в таком вопросе:

B>получил хэндлер окна, перебрал все хэндлеры дочерних окон, ни одно не дало мне текст (пробовал GetWindowText и SendMessage с пометкой WM_GETTEXT)


Наскоко я понимаю, (некоторые)текстовые поля хрянят данные в области памяти своего процесса. Соответсвенно указатель на TCHAR в WM_GETTEXT должен указывать на память процесса, которому этот едит принадлежит. Хотя вот со всякими кнопками и статиками такой номер проходит (можно в таскбаре поменять в кнопке "statr" надпись на "stop" )
А вот с едитами... что прикольно: есть чужой едит, говорим ему SetWindowText, всё нормально, смотрим в этот едит — там старый текст. Но берём спай, находим окно, и видим там наш новый текст! Причём это не глюк записи в никуда в своей памяти: берём ещё один спай, он тоже покажет новый текст.
С родными едитами — всё ок, они прописывают именно видимый текст.

B>А вообще НЕОБХОДИМО вытащить текст из строки состояния приложения


B>Вот, что я ещё выяснил:

B> Строка состояния класса V8CommandLine

По-моему, с нестандартными классами, получить текст окна — дохлый номер. Но можно погуглить имя класса и посмотреть описание, может и есть способы.
Btw, wm_gettext, у статусбаров свои мессаджи для установки-получения текста. SB_GETTEXTA/SB_SETTEXTA (SB_GETTEXTW/SB_SETTEXTW)
Re[2]: Получение текста из дочернего окна стороннего приложе
От: Аноним  
Дата: 29.01.10 08:22
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>По-моему, с нестандартными классами, получить текст окна — дохлый номер. Но можно погуглить имя класса и посмотреть описание, может и есть способы.

CEM>Btw, wm_gettext, у статусбаров свои мессаджи для установки-получения текста. SB_GETTEXTA/SB_SETTEXTA (SB_GETTEXTW/SB_SETTEXTW)


Спасибо, попробую )) Хотя SB_GETTEXTA не воспринимается компилятором
Re[2]: Получение текста из дочернего окна стороннего приложе
От: bands  
Дата: 29.01.10 08:25
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>По-моему, с нестандартными классами, получить текст окна — дохлый номер. Но можно погуглить имя класса и посмотреть описание, может и есть способы.

CEM>Btw, wm_gettext, у статусбаров свои мессаджи для установки-получения текста. SB_GETTEXTA/SB_SETTEXTA (SB_GETTEXTW/SB_SETTEXTW)


Спасибо, попробую )) Хотя SB_GETTEXTA не воспринимается компилятором
Re[3]: Получение текста из дочернего окна стороннего приложе
От: CEMb  
Дата: 29.01.10 11:00
Оценка:
Здравствуйте, bands, Вы писали:

B>Спасибо, попробую )) Хотя SB_GETTEXTA не воспринимается компилятором


Надо SB_GETTEXT, это дефайн, который распарсится, в зависимости от unicode or not
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.