Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Опять о чужих окнах... Вопрос к знатокам 
:(
    Опции темы
Vit
  Дата 3.6.2002, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Есть чужое оконное приложение, навскидку, стоит на форме что-то типа StatusBar, есть ли возможность прочитать строку записанную, например, на пятой панеле этого StatusBar? Только не надо мне перечислять все API  для работы с чужими окнами, если можно лучше простейший кусочек кода.




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Baa
Дата 4.6.2002, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



HWND окна и статус бара знаем?


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Vit
Дата 4.6.2002, 04:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Окна - знаем, StatusBar - нет (никогда реально не пробовал работать с ними, там вроде какие-то enum-функции для нахождения списка компонентов, но я никогда не работал и примеров не видел).


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
dead_ricky
Дата 4.6.2002, 06:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.4.2002

Репутация: нет
Всего: 1



Вот тут через WinSight видно child-окно Internet Explorer'a, класса msctls_statusbar32.

По-моему че бы получить хэндл  этого статусного окна, нужно:

IEHandle:=FindWindow(pchar('IEFrame'), nil {ну или имя окна если известно});
StatusBarHandle:=FindWindowEx(IEHandle, 0, pchar('msctls_statusbar32'), nil);

И все (не ну понятно вы и сами это знали, это я так просто - а вдруг вы не знали... :)).

А вот чё дальше делать, смысле как текст получить я не знаю...

З.Ы. Кстати, то что я написал, я не проверял... но по-моему должно сработать...
Еще один З.Ы. Может какой-нить GetText... по пробовать?
PM MAIL   Вверх
Song
Дата 4.6.2002, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: 2
Всего: 4



Или смотрим название класса окна Statusbar и находим по FindWindowEx() либо смотрим иерархию объектов в дереве окна по WinSight и наохдим дискриптор по GetWindow()
Далее применяем к нему WM_GETTEXT или WM_COPY


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
TwoK
Дата 4.6.2002, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 25.3.2002

Репутация: нет
Всего: нет



Есть прекрасная апишная функция GetWindowText()


--------------------
Говорят, что население в стране все меньше и меньше. А народу по утрам в метро почему-то все больше и больше...
PM MAIL   Вверх
Vit
Дата 4.6.2002, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Господа, а пример у кого есть? Я же просил в сообщении именно пример, потому что открыв справку по WinAPI я и сам смогу найти за пару минут десяток функций для работы с чужими окнами...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Song
Дата 4.6.2002, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: 2
Всего: 4



Вы поймите, что готового примера быть не может потому что он зависит от конкретного Вашего чужого приложения. Чтобы найти хэндл надо либо знать название классов в частности Statusbar'а или еарархию окон внутри приложения.

Вот ИМХО как взять текст из notepad'а например, сейчас набросаю...

Var array: [1..$FF] of Char;
....
Код

ShellExecute(Handle,'open','2.txt',nil,nil,SW_SHOWNORMAL);
Sleep(100);
IF SendMessage(GetWindow(GetForeGroundWindow,GW_CHILD),WM_GETTEXT,SizeOf(Arr),Integer(@Arr))>0 then ShowMessage(Arr) else ShowMessage('Неудача!');


Поэтому даже разговаривать нечего о готовом примере для работы с чужими окнами в любом чужом приложении. Так что, многоуважаемый Vit, дерзайте!  :)


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Vit
Дата 4.6.2002, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Большое спасибо за пример. С этим понятно, теперь вопрос следующий:

Цитата

классов в частности Statusbar'а или еарархию окон внутри приложения.


А как их узнать, существует ли какой способ (судя по тому что я слышал - существует)


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 4.6.2002, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Song @ 04.6.2002, 09:06)
Поэтому даже разговаривать нечего о готовом примере для работы с чужими окнами

Все не так страшно, я же не прошу написать прогу за меня, просто если упоминают что надо использовать функцию xxxx то просто прошу дать пример как ею пользоваться. Впрочем Вы вполне ответили на часть моего вопроса дав замечательный пример...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Song
Дата 4.6.2002, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: 2
Всего: 4



Название классов можно узнать из описания ф-ии CreateWindow() в хэлпе. А иерархию+все названия, классы etc просматривается в WinSight.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Vit
Дата 4.6.2002, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Song @ 04.6.2002, 09:27)
А иерархию+все названия, классы etc просматривается в WinSight.

Вот и я о том же, если WinSight это видит, то как мне сделать то же самое?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Song
Дата 4.6.2002, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: 2
Всего: 4



Сначал собираем окна первого уровня - EnumWindows()
Список дочерних побыстрей можно получить через EnumChildWindows(). Обычным способом они находтся через GetWindow(). Для каждого child'а находим его child'ов таким же образом.
Имя класса - GetClassName()
Название окна - GetWindowName()

Если соображать лень или пока не понятно, здесь всё это расжовано и по-моему даже есть прога, которая всё это покажет.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Vit
Дата 4.6.2002, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Класс! Спасибо большое, действительно классная статья. Надо бы ее в наш FAQ засунуть.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.