Здравствуйте!
Подскажите, кто знает, в таком вопросе:
получил хэндлер окна, перебрал все хэндлеры дочерних окон, ни одно не дало мне текст (пробовал 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 <----- Здесь приложение, которое на данный момент у меня получилось
Здравствуйте, 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)
Здравствуйте, CEMb, Вы писали:
CEM>По-моему, с нестандартными классами, получить текст окна — дохлый номер. Но можно погуглить имя класса и посмотреть описание, может и есть способы.
CEM>Btw, wm_gettext, у статусбаров свои мессаджи для установки-получения текста. SB_GETTEXTA/SB_SETTEXTA (SB_GETTEXTW/SB_SETTEXTW)
Спасибо, попробую )) Хотя SB_GETTEXTA не воспринимается компилятором