![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кнопка в заголовке всех окон [D6, D7, Win95/98, WinXP]
Lin © (2004-06-29 12:09:00)Хочу поместить кнопку в заголовок всех окон (наподобие zip-magic'а). На форумах нашёл только как поместить кнопку в заголовок своего окна :(
Собираюсь решать задачу так:
0. Пройтись по всем окнам и отобрать окна с заголовками.
1. Определить каким процессам принадлежат отобранные окна.
2. Установить хук на эти процессы.
3. Подменить процедуры этих окон на свои, в которых будет происходить отрисовка моей кнопки.
После всего этого, чтобы обрабатывать новые окна:
4. а) С каким-то интервалом времени отыскивать новые окна и повторять п. 1-3 - как идея это должно сработать, но реализовывать так я не хочу по целому ряду причин...
4. б) Установить перехват API функций (CreateWindow, MessageBox и др.).
Вопросы к профи:
0. В целом по стратегии: что-то, имхо, слишком сложно. Может быть будет достаточно установить хуки на WH_CALLWNDPROC, WH_GETMESSAGE и WH_GETMESSAGE? Всю обработку делать в них и не подменять процедуры окон, т.е. убрать п. 3-4.
1. Как узнать есть ли у окна заголовок?
2. Если таки прийдётся делать перехват API функций, какие перехватывать? Имхо: CreateWindow, CreateWindowEx, MessageBox, MessageBoxEx, MessageBoxIndirect, CreateDialog, CreateDialogIndirect, CreateDialogIndirectParam, CreateDialogParam, DialogBox, DialogBoxIndirect, DialogBoxIndirectParam, DialogBoxParam и ещё + к этой куче LoadLibrary, LoadLibraryEx, GetProcAddress. - О-ля-ля!! Я ничего не забыл?
Заранее спасибо всем.
P.S. Надеюсь я не сильно притомил длинным вопросом... :)
GuAV (2004-06-29 13:30:00) [1]Имхо меньше. Например MessageBox это wrapper к MessageBoxEx, и т.д.
Lin (2004-06-29 13:16:00) [2]Пока писал предыдущий пост Игорь уже ответил... Спасибо.
Lin (2004-06-29 13:12:00) [3]Упс! Торможу... Знаете ли первый рабочий день на неделе...
Вопрос №1 снят. Есть такой стиль WS_CAPTION ...
Игорь Шевченко (2004-06-29 13:11:00) [4]
> 1. Как узнать есть ли у окна заголовок?
(GetWindowLong(hWnd, GWL_STYLE) and WS_CAPTION) = WS_CAPTION