Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Нескрываемая иконка в области уведомления?


Автор: DarkDragon 24.2.2009, 00:27
Всем добрый день!

Вопрос такой: нужно программным методом задать поведение иконки в области уведомления (системный трей). Бывает три вида поведения: 1 - скрывать, если не активный, 2 - всегда скрывать, 3 - всегда отображать. Так вот как это сделать?

P. S. Метод с обновлением (чтобы иконка не скрывалась) меня не интересует smile

Автор: BorisVorontsov 24.2.2009, 11:30
Думаю, никак. По крайней мере какого-нибудь сообщения или Shell-функции я не нашел. И вообще, что за наглость, посягать на установки пользователя? smile Раз он решил выставить что-то для твоей иконки, значит, ему так надо.

Автор: DarkDragon 24.2.2009, 12:17
Иногда пользователю надо помочь, а то не все пользователи умеют пользоваться настройками уведомлений smile

Цитата(BorisVorontsov @  24.2.2009,  11:30 Найти цитируемый пост)
Думаю, никак.

Нет вы не правы. Microsoft далеко не все открывает в своей системе. К тому же как это их софт: Virtual PC сразу же ставить себя как "всегда отображать"? Еще как можно, просто как то хитро они это реализовали. Может сообщение какое-то нужно отправить TrayNotifyWnd? Или еще чего нибудь. Система же может изменять эти состояния, значить должен быть программный интерфейс.

Автор: BorisVorontsov 24.2.2009, 14:28
Если эта возможность не документирована, то её, можно сказать, нет smile А если ты её каким-то образом нашел и используешь, это уже называется грязным хаком, и MS не гарантирует, что приложения, использующие грязные хаки (недокументированные возможности), будут работать не то, что в других ОС, а даже в этой, но с апдейтами/SP.

Автор: DarkDragon 24.2.2009, 16:07
Да мелкософт, вообще мало что гарантирует smile К тому же есть понятия апдейта софта. Так что мне нужен способ гарантирующий работу на линейках 2000/NT/XP. Остальные не интересуют. Если можно сказать что её нет, значить её вообще не должно быть. К тому же кроме Virtual PC, к примеру еще WinAMP, SoundMAX, TechniSat DVB,  и еще хз сколько другого софта используют данную фишку. Так что не документированность, еще не повод не использовать функции.

Автор: BorisVorontsov 24.2.2009, 17:14
Цитата(DarkDragon @  24.2.2009,  16:07 Найти цитируемый пост)
Если можно сказать что её нет, значить её вообще не должно быть.


Замечательный софизм smile Я его, наверно, запишу

Цитата(DarkDragon @  24.2.2009,  16:07 Найти цитируемый пост)
К тому же кроме Virtual PC, к примеру еще WinAMP, SoundMAX, TechniSat DVB,  и еще хз сколько другого софта используют данную фишку.


Вот только что запустил Winamp и проверил, у его иконки точно такая же настройка, как и у остальных. Может, у тебя какой-то особенный Winamp?

Автор: DarkDragon 24.2.2009, 18:55
Цитата(BorisVorontsov @  24.2.2009,  17:14 Найти цитируемый пост)
Замечательный софизм smile Я его, наверно, запишу

Запишите.

Цитата(BorisVorontsov @  24.2.2009,  17:14 Найти цитируемый пост)
Вот только что запустил Winamp и проверил, у его иконки точно такая же настройка, как и у остальных. Может, у тебя какой-то особенный Winamp? 

Возможно.

Автор: jonie 24.2.2009, 21:38
The dwState and dwStateMask members ...
undocumented    0x20000000    valid only in dwStateMask and only if dwMessage is NIM_ADD; set “always show” for icon if no state persists from registry

взято отсюда: 
http://www.geoffchappell.com/studies/windows/shell/shell32/api/shlnot/notifyicondata.htm

в кеше гугла найдется)
http://209.85.129.132/search?q=cache:pWv5znsA-fMJ:www.geoffchappell.com/studies/windows/shell/shell32/api/shlnot/notifyicon.htm+http://www.geoffchappell.com/studies/windows/shell/shell32/api/shlnot/notifyicondata.htm&hl=ru&ct=clnk&cd=2&client=opera

Автор: DarkDragon 24.2.2009, 23:09
jonie, 
спасибо! будем проверять smile

Автор: Dem_max 25.2.2009, 05:23
Цитата

undocumented    0x20000000

Что значит недокументирована, очень даже документирована, просто надо читать MSDN
Цитата

dwState
Windows 2000 (Shell32.dll version 5.0) and later. The state of the icon. There are two flags that can be set independently.
NIS_HIDDEN
0x00000001. The icon is hidden.
NIS_SHAREDICON
0x00000002. The icon is shared.
dwStateMask
Windows 2000 (Shell32.dll version 5.0) and later. A value that specifies which bits of the dwState member are retrieved or modified. The possible values are the same as those for dwState. For example, setting this member to NIS_HIDDEN causes only the item's hidden state to be retrieved while the icon sharing bit is ignored regardless of its value.

Пробовал я, только почемуто не работает.

Автор: jonie 25.2.2009, 09:13
Dem_max ну никто не читал, пологаясь на автора )

Автор: BorisVorontsov 4.3.2009, 11:06
Цитата(jonie @  24.2.2009,  21:38 Найти цитируемый пост)
взято отсюда:


Может, все-таки http://www.gotdotnet.ru/Forums/Windows/563019.aspx?

Цитата(Dem_max @  25.2.2009,  05:23 Найти цитируемый пост)
Что значит недокументирована, очень даже документирована, просто надо читать MSDN


А ты 0x20000000 от 0x00000002 не отличаешь?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)