Программируем Windows 7: Taskbar. Часть 6 – AppId

Недавно я писал о том, как можно организовать отображение вкладок для дочерних окон нашего приложения. В этом случае нам требовалось отобразить дочерние окна нашего приложения. Для этих целей мы пользовались классом CustomWindowManager.



Такого же эффекта можно добиться, если мы запустим несколько экземпляров одного и того же нашего приложения. В этом случае Windows 7 определит что это одно и то же приложение и сгруппирует окна в один значок.



Давайте попробуем разобраться как это работает. В основе всего лежит такое понятие как Application ID. Для каждого окна мы можем задать свой ID. Эту особенность также можно использовать тогда, когда необходимо избежать такого поведения. В этом случае нужно задать различные AppId для каждого такого окна. Сделать это можно используя .NET Interop Sample Library. Для этого необходимо вызвать метод SetAppId.

private void SetAppIdButton_Click(object sender, EventArgs e)
{
WindowsFormsExtensions.SetAppId(this, “SomeAppId”);
}


Таким образом, мы можем задать различные AppId для каждого окна и они не будут группироваться.



Однако, аналогичным образом также возможно сгруппировать несколько окон от разных приложений. Для этого необходимо задать одинаковый AppId для каждого из окон. И в этом случае панель задач Windows 7 сгруппирует эти приложения в один значок. Например, в данном случае я задал одинаковый AppId для разных окон из разных приложений и эти окна оказались сгруппированными в панели задач Windows 7.



Демонстрационное приложение:
Taskbar-AppId.zip
+29
27 мая 2009, 20:24
25
Sergun 35,6

комментарии (38)

–40
Yolenzo #
MAC наше все.
+23
crash #
сказал и аж потекло?
–24
Yolenzo #
что значит твое твое предложение?
+6
kottt #
Не совсем понял, к чему это вы?
С точки зрения программиста, или пользователя?
–12
Yolenzo #
С точки зрение пользователя, почему такую штуку, которую предлагает сделать автор нет по дефолту в винде или что бы была в настройках галочка вот сделать таким образом.
–5
kottt #
Эмм… Какую такую шкуру?
–14
Yolenzo #
По цвету она как у бегемота, серого цвета +)
–1
kottt #
Ну в общем да, смотрите чуть ниже.
+2
kottt #
Нет, ну вот что я такого сказал? Я действительно _не понимаю_ о какой такой шкуре речь вообще? Почему нужно ставить минус вместо объяснений?
Если вы имели в виду скин виндовса — так это стандатный скин из WIndows 7. Что еще могло подразумеваться — я не представляю.
В статье вообще речь ни о какой шкуре не идет. О чем вы? Автор рассказал, как разработчик, при желании, может группировать разные окна в одну иконку, или наоборот
+2
Yolenzo #
А вы знайте я ни разу никому на хабре не ставил мину ни за коменты ни за карму — так что первый блок сообщение не мне.

Ты написал про шкуру, я понял как как шкуру и назвал цвет шкурки винды. Но я писал про штуку.
+1
kottt #
Упс… Закидывай тухлыми яйцами — я тупой идиот :) Плюс тебе в карму, чтоб мне со стыда помирать было не так обидно :-\
–1
nullbie #
дак есть же ) просто это можно дополнительно контролировать… пример — система состоящая из нескольких приложений, группирующая окна в одну пачку. или наоборот, одно приложение открывает кучу проектов и окна каждого проекта собирает в отдельную стопку.
–10
Yolenzo #
Отлично, Среда — день Папы минуса и понижения кармы. Ла-ла-ла. И прочтет кто-то и затрясет его, возжелает истины и влепит минус. И будет с ним добродетель.
+8
alexiznot #
Блять, заткнитись.
–8
Yolenzo #
LOL
0
Zagrebelion #
То есть, можно своё приложение засунуть за иконку, скажем, ворда?
0
kottt #
Если, конечно, узнать AppId ворда
0
preprocessor #
А это проблема? Он для всегда статичен, на любом компьютере или может и динамически формироваться?
0
kottt #
А вот я не помню. Хотя… Думаю, можно все же
+2
lumenous #
Интересная вещица.
Было бы здорово, если бы подобную группировку можно было делать не только на «программном» уровне, но и на пользовательском. Чтобы пользователь сам мог выбрать какие приложения он хочет сгруппировать… Например, Firefox и IE, Видео- и аудио- плеер… кому как удобнее…
0
Sergun #
Интересная мысль.
0
nullbie #
Не проверял, но скорее всего можно повесить хук на создание окна и когда он вызовется (в контексте процесса создавшего окно) поставить AppId используя нативно апи. С вероятностью 99% это сработает, а значит такое софт скоро появится :)
0
nullbie #
более точная ссыла (для одного окна, а не для всего процесса): msdn.microsoft.com/en-us/library/dd378430(VS.85).aspx
0
klinifini #
Оффтоп.
Возник вопрос, а менять местами значки в таскбаре в семёрке можно?
+1
Colobock #
хватаешь и перетаскиваешь.
НЛО прилетело и опубликовало эту надпись здесь
–11
muse #
Автор ты задрал конкретно своими писульками. Все что ты написал есть в документации.
+3
lumenous #
Если так задрал, то почему бы не взять и просто проигнорировать данную статью?
Тут огромное кол-во людей, которым это очень даже интересно.
–3
muse #
Им интересно потому, что в скучном офисе нечем заняться. А мне скучно не до такой степени чтобы протирать глазенки одними и теми же статьями, между прочим бессмысленными начиная со второй.

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

Хорош постить одно и тоже УГ! Напиши лучше про кодинг виртуального режима в ListView или применение там же интерфейса IComparer, или как он там называется, давно дело было. Было бы куда полезнее, чем слизывать с документации исходный код.
+1
Sergun #
muse, весь контент в сети можно подвести под ваши слова.
вообще, меньше эксперсии и больше отдыха и все будет хорошо.
–4
muse #
А это и есть отдых. Приятно как офисные обитатели сруца из-за комментариев неизвестного лица, о котором они ничего не знают, но считают своим долгом доказать ему свою правоту, и непровоту быдла(читай меня). Это ж фан.
Забавно другое, что по ситу вопроса никто не пишет. Даж мнения свое держат при себе. А я же как настоящий дАртаньян пишу от своего, пускай и анонимного, лица. Свое собвственное мнение. Щито статья говно и прочее.
Вы меня простите конечно, не видел что вы работает на сами знаете кого, и ваши статьи нельзя воспринимать всерьез. Хотя про пеар я уже писал, но повторюсь, что это лишнее. Распространять безценные(в плане нулевого эквивалента мысли) статьи пошло и не тянет на такого спеца по подставам и хитрым ходам как Microsoft.
+1
Sergun #
Я работаю на себя, если что.
–2
muse #
Ваша статья от этого не выиграла
0
Sergun #
Я на это и не претендовал. :)
–2
muse #
А зря. Нет, правда. Очень зря. Нехуй постить хуйню.
0
wildvampir #
А не подскажешь где можно найти API и примеры для нативного С++?
0
trak #
Знаете, не смотря на то, что для меня Ваши топики абсолютно бесполезны с практической точки зрения (ну не буду я программировать подобные вещи — я ораклоид и юниксоид), я от серии Ваших статей в восторге. Наверное потому что Win7 просто как-то мне сразу понравилась. Вот когда была Win95 она была просто убога в интерфейсе относительно KDE/Gnome & etc, то теперь все ровно наоборот получилось.
0
wildvampir #
А вы знаете что проекты KDE и Gnome были основаны в 1996 и 1997 году соответсвенно?.. т.е. KDE только задумали через год после выхода win95, а первая его версия так вообще в 98 году :) и был подозрительно похож по интерфейсу на win95 :)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.