Определение типа окна (главное, дочернее)
От: Randir  
Дата: 30.04.04 10:17
Оценка:
Стоит хук и при сообщении WM_SHOWWINDOW должен определить какое окно — главное окно или дочернее. И возникла проблема как определить максимально верное. Ни по классу окна, ни по родителю не удается получить верно. Даже если не брать по классам Static,Button и подобные, все равно очень много лишнего. И даже главные окна имеют флаг WS_CHILD и парент. Кто-нибудь может подсказать советом?
Re: Определение типа окна( главное, дочернее)
От: Pavel Dvorkin Россия  
Дата: 30.04.04 10:35
Оценка:
Привет!

Randir wrote:
>
> Стоит хук и при сообщении WM_SHOWWINDOW должен определить какое окно — главное окно или дочернее. И возникла проблема как определить максимально верное. Ни по классу окна, ни по родителю не удается получить верно. Даже если не брать по классам Static,Button и подобные, все равно очень много лишнего. И даже главные окна имеют флаг WS_CHILD и парент. Кто-нибудь может подсказать советом?

Откуда такое ? Нет у главных окон никакого WS_CHILD и парента нет. Как
определял стиль ?

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[2]: Определение типа окна( главное, дочернее)
От: Randir  
Дата: 30.04.04 10:40
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Привет!


PD>Randir wrote:

>>
>> Стоит хук и при сообщении WM_SHOWWINDOW должен определить какое окно — главное окно или дочернее. И возникла проблема как определить максимально верное. Ни по классу окна, ни по родителю не удается получить верно. Даже если не брать по классам Static,Button и подобные, все равно очень много лишнего. И даже главные окна имеют флаг WS_CHILD и парент. Кто-нибудь может подсказать советом?

PD>Откуда такое ? Нет у главных окон никакого WS_CHILD и парента нет. Как

PD>определял стиль ?

PD>--

PD>With best regards,
PD> Pavel Dvorkin

PCWPSTRUCT wnd = (PCWPSTRUCT) lParam;
HWND parent = GetParent(wnd->hwnd);
RealGetWindowClass(wnd->hwnd, wndcl, 255);
DWORD textstyle = GetWindowLong(wnd->hwnd, GWL_STYLE);

Сейчас масимальное кол-во главных окон пытаюсь определить таким вот ужасным образом:
if( (strcmp(wndcl, "Button") != 0) && (strcmp(wndcl, "Static") != 0) && (strcmp(wndcl, "tooltips_class32") != 0) && (strcmp(parwndcl, "#32770") != 0) )
{
// главное (наверное
}
Re[3]: Определение типа окна( главное, дочернее)
От: Pavel Dvorkin Россия  
Дата: 30.04.04 10:54
Оценка:
Привет!

Randir wrote:
>
> Здравствуйте, Pavel Dvorkin, Вы писали:
>
> PD>Привет!
>
> PD>Randir wrote:
> >>
> >> Стоит хук и при сообщении WM_SHOWWINDOW должен определить какое окно — главное окно или дочернее. И возникла проблема как определить максимально верное. Ни по классу окна, ни по родителю не удается получить верно. Даже если не брать по классам Static,Button и подобные, все равно очень много лишнего. И даже главные окна имеют флаг WS_CHILD и парент. Кто-нибудь может подсказать советом?
>
> PD>Откуда такое ? Нет у главных окон никакого WS_CHILD и парента нет. Как
> PD>определял стиль ?
>
> PD>--
> PD>With best regards,
> PD> Pavel Dvorkin
>
> PCWPSTRUCT wnd = (PCWPSTRUCT) lParam;

То есть WH_CALLWNDPROC ?


> RealGetWindowClass(wnd->hwnd, wndcl, 255);

> DWORD textstyle = GetWindowLong(wnd->hwnd, GWL_STYLE);

И что, здесь textstyle & WS_CHILD всегда != 0 ? Можешь вывести в log
wndcl и textstyle ? (последнее лучше в 16 виде


--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[4]: Определение типа окна( главное, дочернее)
От: Randir  
Дата: 30.04.04 12:09
Оценка:
Да, именно WH_CALLWNDPROC

Сейчас ... пару примеров...

Может я и не прав.

При условии — if(textstyle & WS_CHILD != 0) и запуске IE отлавливается только:

Заголовок-Internet Explorer, класс-SysListView32, заголовок parenta-, класс parenta-Auto-Suggest Dropdown, handle parenta-0125050E, стиль-44005405

Без условия еще и:

Заголовок-about:blank, класс-ComboBoxEx32, заголовок parenta-, класс parenta-ReBarWindow32, handle parenta-01770416, стиль-52010042

Мне бы вот условия как отловить главные и дочерние.....

Запуск MSDN с этим условием вообще ничего не отлавливает.
Re[5]: Определение типа окна( главное, дочернее)
От: cyg Россия  
Дата: 30.04.04 13:39
Оценка:
Здравствуйте, Randir, Вы писали:

R>При условии — if(textstyle & WS_CHILD != 0) и запуске IE отлавливается только:


Оператор != имеет более высокий приоритет чем &. Поставь скобки:

if((textstyle & WS_CHILD) != 0) или if(textstyle & WS_CHILD)

Ставь скобки всегда!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.