| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Опять о чужих окнах... |
| Автор: Vit 3.6.2002, 23:14 |
| Есть чужое оконное приложение, навскидку, стоит на форме что-то типа StatusBar, есть ли возможность прочитать строку записанную, например, на пятой панеле этого StatusBar? Только не надо мне перечислять все API для работы с чужими окнами, если можно лучше простейший кусочек кода.
|
| Автор: Baa 4.6.2002, 01:31 |
| HWND окна и статус бара знаем? |
| Автор: Vit 4.6.2002, 04:13 |
| Окна - знаем, StatusBar - нет (никогда реально не пробовал работать с ними, там вроде какие-то enum-функции для нахождения списка компонентов, но я никогда не работал и примеров не видел). |
| Автор: dead_ricky 4.6.2002, 06:01 |
| Вот тут через WinSight видно child-окно Internet Explorer'a, класса msctls_statusbar32. По-моему че бы получить хэндл этого статусного окна, нужно: IEHandle:=FindWindow(pchar('IEFrame'), nil {ну или имя окна если известно}); StatusBarHandle:=FindWindowEx(IEHandle, 0, pchar('msctls_statusbar32'), nil); И все (не ну понятно вы и сами это знали, это я так просто - а вдруг вы не знали... А вот чё дальше делать, смысле как текст получить я не знаю... З.Ы. Кстати, то что я написал, я не проверял... но по-моему должно сработать... Еще один З.Ы. Может какой-нить GetText... по пробовать? |
| Автор: Song 4.6.2002, 07:50 |
| Или смотрим название класса окна Statusbar и находим по FindWindowEx() либо смотрим иерархию объектов в дереве окна по WinSight и наохдим дискриптор по GetWindow() Далее применяем к нему WM_GETTEXT или WM_COPY |
| Автор: TwoK 4.6.2002, 13:38 |
| Есть прекрасная апишная функция GetWindowText() |
| Автор: Vit 4.6.2002, 15:49 |
| Господа, а пример у кого есть? Я же просил в сообщении именно пример, потому что открыв справку по WinAPI я и сам смогу найти за пару минут десяток функций для работы с чужими окнами... |
| Автор: Song 4.6.2002, 17:06 | ||
| Вы поймите, что готового примера быть не может потому что он зависит от конкретного Вашего чужого приложения. Чтобы найти хэндл надо либо знать название классов в частности Statusbar'а или еарархию окон внутри приложения. Вот ИМХО как взять текст из notepad'а например, сейчас набросаю... Var array: [1..$FF] of Char; ....
Поэтому даже разговаривать нечего о готовом примере для работы с чужими окнами в любом чужом приложении. Так что, многоуважаемый Vit, дерзайте! |
| Автор: Vit 4.6.2002, 17:14 | ||
Большое спасибо за пример. С этим понятно, теперь вопрос следующий:
А как их узнать, существует ли какой способ (судя по тому что я слышал - существует) |
| Автор: Vit 4.6.2002, 17:17 | ||
Все не так страшно, я же не прошу написать прогу за меня, просто если упоминают что надо использовать функцию xxxx то просто прошу дать пример как ею пользоваться. Впрочем Вы вполне ответили на часть моего вопроса дав замечательный пример... |
| Автор: Song 4.6.2002, 17:27 |
| Название классов можно узнать из описания ф-ии CreateWindow() в хэлпе. А иерархию+все названия, классы etc просматривается в WinSight. |
| Автор: Vit 4.6.2002, 17:33 | ||
Вот и я о том же, если WinSight это видит, то как мне сделать то же самое? |
| Автор: Song 4.6.2002, 18:28 |
| Сначал собираем окна первого уровня - EnumWindows() Список дочерних побыстрей можно получить через EnumChildWindows(). Обычным способом они находтся через GetWindow(). Для каждого child'а находим его child'ов таким же образом. Имя класса - GetClassName() Название окна - GetWindowName() Если соображать лень или пока не понятно, http://delphi.mastak.ru/articles/winapi/index.html всё это расжовано и по-моему даже есть прога, которая всё это покажет. |
| Автор: Vit 4.6.2002, 18:46 |
| Класс! Спасибо большое, действительно классная статья. Надо бы ее в наш FAQ засунуть. |