Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> top-level windows 
:(
    Опции темы
S.A.G.
Дата 18.6.2010, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



Как идентифицировать те из них, которые находятся на десктопе?


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
ИванМ
Дата 18.6.2010, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

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



Чтобы обратиться к самому верхнему окну, можно просто написать GetWindow(0, GW_HWNDFIRST)
PM MAIL   Вверх
S.A.G.
Дата 18.6.2010, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



ИванМ, это вроде самое верхнее в z-order. А мне нужно узнать, развернуто(не обязательно на весь экран) окно на экране или нет.


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
GremlinProg
Дата 18.6.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Код

if( !::IsIconic( hwnd ) ){
  //  развернуто
}else{
  // нет
}



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
S.A.G.
Дата 18.6.2010, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



GremlinProg, мне надо свернуть все top-level windows, которые на даный момент есть на рабочем столе. Т.е., parent у них десктоп. Если я проверяю FALSE в IsIconic, то стопкой на рабочий стол сворачивается куча каких-то левых окошек.

Добавлено через 8 минут и 40 секунд
Цитата(S.A.G. @  18.6.2010,  16:28 Найти цитируемый пост)
Т.е., parent у них десктоп.

Гм, как оказалось, необязательно..


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
GremlinProg
Дата 21.6.2010, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(S.A.G. @  18.6.2010,  18:28 Найти цитируемый пост)
Если я проверяю FALSE в IsIconic, то стопкой на рабочий стол сворачивается куча каких-то левых окошек.

IsIconic - функция, которая только возвращает информацию, она ничего не сворачивает,
а вот вернуть FALSE может для окон, которые к тому же невидимы,
поэтому тут надо еще проверять и этот момент:
Код

BOOL CALLBACK ew( HWND hwnd, LPARAM lParam ){
    if( ::IsWindowVisible( hwnd ) && !::IsIconic( hwnd ) ){
        ++*(SIZE_T*)lParam;
    }
    return TRUE;
}
...
TCHAR Buffer[80];
SIZE_T cntr = 0;
::EnumWindows( ew, (LPARAM)&cntr );
_stprintf_s( Buffer, TEXT("развернуто окон: %i"), cntr );
::MessageBox( 0, Buffer, TEXT(""), MB_OK );
...




--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
S.A.G.
Дата 7.12.2010, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



Такой фильтр фильтрует большинство окон. Однако остается "Пуск", панель задач и т.д., всего до десятка. Какое дополнительное условие может отфильтровать, к примеру, "Пуск"? Как однозначно выделить именно это окно среди всех остальных возможных, для которых GetWindowText возвращает "Пуск"("Start" и так далее для других языков), размеры такие же и даже те же координаты(что очень маловероятно, но возможно тем не менее)?


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
GremlinProg
Дата 7.12.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



у "Пуск" CtrlID = 0x130, у трея CtrlID = 0x12f, у ребара панели задач CtrlID = 0xa005 и т.д. см. Spy++

помимо этого, все они находятся на панели задач, т.е. у всех стоит стиль WS_CHILD, 
а класс панели задач Shell_TrayWnd, т.е. способов фильтровать предостаточно:
1. проверить наличие стиля WS_CHILD - отметет все дочерние
2. проверить наличие в любом колене родителя с классом Shell_TrayWnd - отметет любых участников панели задач
3. проверить GetDlgCtrlID, если нужен индивидуальный подход


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
S.A.G.
Дата 7.12.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



По поводу пункта 1 у меня ни одно из лишних окон не имеет стиля WS_CHILD. Может неправильно проверяю, делаю следующим образом:
GetWindowInfo(), dwStyle == 2483031040. Это "Пуск". Где там WS_CHILD?

Получается, что ни один из предложенных вариантов не работает.

Это сообщение отредактировал(а) S.A.G. - 7.12.2010, 14:21


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
GremlinProg
Дата 7.12.2010, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата

Это неправильные пчелы и они делают неправильный мед

https://docs.google.com/leaf?id=0B3exyGGpaH...1ODg5&hl=en


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
S.A.G.
Дата 7.12.2010, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



Я правильно проверяю наличие стиля?

2483031040 - здесь его нет
54000D00 - а здесь есть

Почему у меня нет? Windows 7 если что.

Это сообщение отредактировал(а) S.A.G. - 7.12.2010, 14:44


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
GremlinProg
Дата 7.12.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(S.A.G. @  7.12.2010,  16:41 Найти цитируемый пост)
Я правильно проверяю наличие стиля?

а где эта проверка?

правильно так:
Код

if( dwStyle & WS_CHILD ){
  //  дочерний
}else{
  //  нет
}




--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
S.A.G.
Дата 7.12.2010, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



GremlinProg, посмотрел в спае, вы удивитесь, но там пуск не чяйлд). WS_POPUP, WS_VISIBLE, WS_CLIPSIBLINGS, BS_PUSHBUTTON, BS_TEXT, BS_TOP, BS_BOTTOM - это все что есть в окошке основные стили. Хэндл такой же как и у меня в программе(2483031040).

Это сообщение отредактировал(а) S.A.G. - 7.12.2010, 14:57


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
GremlinProg
Дата 7.12.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(S.A.G. @  7.12.2010,  16:41 Найти цитируемый пост)
Windows 7 если что

это самый весомый фактор :))

я на хр в данный момент

Это сообщение отредактировал(а) GremlinProg - 7.12.2010, 15:02


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
S.A.G.
Дата 7.12.2010, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



Похоже в 7 пуск повысили до WS_POPUP. В связи с этим будут какие-то предложения по теме?


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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