Faq system tray что такое иконка на system tray


Для чего нужен системный трей

Приветствую всех кто читает этот блог и тех кто пришел первый раз. Меня частенько спрашивают мои читатели: «Что такое системный трей, где находится системный трей, как настроить» и многое другое. Поэтому я решил написать подробную статью, чтобы каждый раз не отвечать на один и тот же вопрос.

Если вы посмотрите в правый нижний угол экрана (там, где находятся часы) скорее всего вы обнаружите хорошо знакомые иконки ICQ, Skype, установленный антивирус и значки других программ. Эта зона и называется системным треем или по-другому область уведомлений. Второе название как нельзя лучше, раскрывает предназначение трея – уведомлять, какие программы запущены и работают в фоновом режиме. Также вы наверное замечали, что именно в области трея появляются сообщения: Windows, антивирусов и других программ.

Трей предоставляет возможность кликом левой кнопкой мыши активировать и вывести на экран интерфейсное окно выбранной программы. Клик правой кнопкой приводит к открытию диалогового окна, в котором можно произвести быструю настройку основных функций программы или вообще ее закрыть.

Фактически, по своему предназначению, системный трей можно сравнить с панелью задач. Единственная разница между ними, это способ получить доступ к программе, так как системный трей отображает уже запущенные программы. При обращении к ярлыку программы в панели задач она предварительно запускается.

Путем несложной настройки с помощью специальных программ, можно поместить практически любую программу в трей.

Никогда не наблюдали такую картину в Windows XP – при наведении на область системного трея раскрывается горизонтальная линия различных ярлыков, которая совсем чуть-чуть не доходит до кнопки «Пуск»? А я наблюдал и неоднократно. Может быть и удобно, но чтобы каждый раз искать из кучи приложений, программу, которая вам нужна — не очень. Зачастую там находятся не совсем нужные вещи для пользователей.

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

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

Почему так происходит? Ответ на этот вопрос очень прост. Рассмотрим ситуацию с точки зрения пользователя. Вы поместили в системный трей свой любимый iTunes, проигрыватель видео, парочку интернет браузеров, естественно Microsoft Office и т.д. Этот список можно продолжать практически до бесконечности. Для вас это, несомненно, гораздо более удобно, чем сворачивать все окна и пользоваться ярлыками или запускать программы через «Пуск». А теперь рассмотрим эту же ситуацию с точки зрения компьютера.

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

Выделяя необходимый объем памяти программам, которые находятся в автозагрузке, Windows тем самым уменьшает ее доступный объем. В результате, компьютер начинает тормозить. Если такое происходит, не стоит сразу винить творение Microsoft и переустанавливать Windows. Как и любой другой компонент операционки системный трей очень легко настраивается.

Если из системного трея исчез значок для извлечение USB накопителей, тогда читайте: «Пропал значок безопасное извлечение устройства».

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

system tray

Англо-русский толковый словарь терминов и сокращений по ВТ, Интернету и программированию. . 1998-2007 .

Смотреть что такое «system tray» в других словарях:

system tray — n the place where the clock and some ↑icons (=small pictures that are used to start a particular operation) are shown on a computer screen … Dictionary of contemporary English

System tray — Область уведомлений в Windows NT Область уведомлений (англ. notification area) или системный трей (англ. system tray, от англ. tray «поднос, поддон») элемент панели инструментов среды рабочего стола («панель задач» в Windows), используемый для… … Википедия

System Tray — Das unter GNOME so genannte „Benachrichtigungsfeld“ zeigt alle Programme, die es unterstützen, zum Beispiel neben der Uhr an Die Taskbar Notification Area (TNA), das Benachrichtigungsfeld, der System Tray (kurz auch Systray oder einfach Tray) –… … Deutsch Wikipedia

System tray — Barre des tâches En informatique, le terme barre des tâches désigne la barre du bureau de l interface graphique du système d exploitation Microsoft Windows qui permet de lancer des programmes et de les surveiller. Cette barre située généralement… … Wikipédia en Français

system tray — sistemos juostelė statusas T sritis informatika apibrėžtis Juostelė su mažomis modemo, spausdintuvo, kalbos ir kitomis ↑piktogramomis. Būna ekrano apačioje, ↑užduočių juostos dešinėje pusėje, paprastai šalia laikrodžio. Iliustraciją žr. priede.… … Enciklopedinis kompiuterijos žodynas

system tray — n. (in Windows operating systems) location on the taskbar in which the clock and other user installed utilities res >English contemporary dictionary

Tray — engl. [trei] (dt. Servierbrett, Ablage, Tablett) steht für: Tray (Umverpackung), eine Umverpackung für Lebensmittelverpackungen Tray (Leergut), ein System in der Leergutrücknahme System Tray, siehe Taskbar Notification Area Datenträger Halter,… … Deutsch Wikipedia

tray — [treı] n ↑glass, ↑bow tie, ↑tray [: Old English; Origin: trig, treg] 1.) a flat piece of plastic, metal, or wood, with raised edges, used for carrying things such as plates, food etc ▪ The waiter brought drinks on a tray. 2.) a flat open… … Dictionary of contemporary English

Tray — Область уведомлений в Windows NT Область уведомлений (англ. notification area) или системный трей (англ. system tray, от англ. tray «поднос, поддон») элемент панели инструментов среды рабочего стола («панель задач» в Windows), используемый для… … Википедия

Tray icon — Barre des tâches En informatique, le terme barre des tâches désigne la barre du bureau de l interface graphique du système d exploitation Microsoft Windows qui permet de lancer des programmes et de les surveiller. Cette barre située généralement… … Wikipédia en Français

Tray and Play — Games for Windows игровая платформа и маркетинговая кампания 2005 году, и которая была пересмотрена в 2006 году. Игры для платформы должны отвечать стандартам сертификации, подобно современным игровым консолям. Цель кампании сделать видеоигры на… … Википедия

Заметки практикующего сисадмина

Дядя Саша Кузьмич пишет о работе

Решение проблемы пропадающих значков в System Tray

Если после загрузки Windows XP пропадают значки в System Tray, например регулятор громкости, диспетчер задач и т.д., то для решения проблемы необходимо в контекстном меню рабочего стола включить опцию «Закрепить веб-элементы на рабочем столе».
Каким образом это может быть взаимосвязано — мне неизвестно, но проблема решается.

Поделиться:

Решение проблемы пропадающих значков в System Tray : 2 комментария

Добрый день. Судя по всему, Вами описан способ под Windows XP.
Я столкнулась с такой проблемой в Windows 7 x64.
Оказалась заблокирована возможность включения/выключения значков питания и центра поддержки в трее.
С помощью одного твикера удалось снять блокировку только с управления значком центра поддержки, управление значком питания не восстанавливается.
Буду признательна за помощь в решении проблемы.
Всё, что находится в интернете по этому поводу, оказалось бесполезно.
Скрин изначальной проблемы тут http://radikal.ru/F/i037.radikal.ru/1302/8e/c1df0ea7997e.jpg
Изменения тут http://s51.radikal.ru/i133/1302/af/4a8cba990ccb.jpg

  1. Александр Кузьмин Автор записи Четверг, 28 Февраль 2013 в 21:18

Для начала необходимо уточнить тип вашего компьютера — настольный или переносной. Дело в том, что на настольных компьютерах отображение индикатора питания всегда заблокировано.
Основная подсказка по поводу управления значками находится на первом скриншоте: параметры были настроены с помощью групповой политики. Запустите редактор групповой политики и перейдите по пути Конфигурация пользователя — Административные шаблоны — Меню «Пуск» и панель задач, здесь вы найдете три параметра, отвечающих за скрытие значков сети, регулятора громкости и индикатора батарей. Попробуйте явно задать нужный параметр — включить или отключить. Для немедленного применения параметров необходимо выполнить команду gpudate /force , возможно потребуется перезагрузить компьютер.
P.S. Разрядность системы в подобных вопросах никогда не играет роли. Единственное отличие может быть в путях веток реестра.

Илон Маск рекомендует:  PAnsiChar - Тип Delphi

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Faq system tray что такое иконка на system tray ?

На этом уроке мы узнаем, как помещать иконки в system tray и как создавать/использовать всплывающее меню.

Пример можете скачать здесь.


System tray — это прямоугольная область панели задач, в которой располагаются несколько иконок. Скорее всего, вы обнаружите там как минимум цифровые часы. Вы можете самостоятельно помещать иконки в system tray. Далее приводятся шаги, которые нужно для этого выполнить:

  • Заполните структуру NOTIFYICONDATA, содержащую следующие поля:
    • cbSize — pазмер данной структуры.
    • hwnd — хэндл окна, которое будет получать уведомление, когда над иконкой в tray’e произойдёт событие мыши.
    • uID — константа, используемая в качестве индентификатора иконки. Вы сами выбираете значение этой константе. В случае, если вы поместили в system tray несколько иконок, вы сможете узнать, над какой именно из них произошло событие мыши.
    • uFlags — указывает, какие поля данной структуры заполнены
      • NIF_ICON Поле hIcon заполнено.
      • NIF_MESSAGE Поле uCallbackMessage заполнено.
      • NIF_TIP Поле szTip заполнено.
    • uCallbackMessage — пользовательское сообщение, которое Windows отошлёт указанному в поле hwnd окну, в случае, когда над иконкой произойдёт событие мыши. Сообщение вы создаете сами.
    • hIcon — хэндл иконки, которую вы хотите поместить в system tray.
    • szTip — 64-байтовый массив, содержащий строку для использования в качестве всплывающей подсказки к иконке.
  • Вызовите Shell_NotifyIcon, определённую в shell32.inc. Данная функция имеет следующий прототип:
    • dwMessage — это тип сообщения, которое нужно отправить оболочке.
      • NIM_ADD Добавляет иконку в system tray.
      • NIM_DELETE Удаляет иконку из system tray.
      • NIM_MODIFY Изменяет иконку в system tray.
    • pnid — это указатель на корректно заполненную структуру NOTIFYICONDATA.
  • Если вы хотите добавить иконку в system tray, используйте сообщение NIM_ADD, если хотите удалить иконку, применяйте NIM_DELETE.

Вот, собственно, и всё. Но чаще всего просто поместить иконку в system tray недостаточно. Вам нужно как-то реагировать на событий мыши, происходящие над этой иконкой. Это можно сделать, обрабатывая сообщение, указанное в поле uCallbackMessage структуры NOTIFYICONDATA. Это сообщение содержит следующие значения в wParam и lParam (отдельное спасибо s__d за эту информацию):

  • wParam содержит ID иконки. Это то же самое значение, что вы поместили в поле uID структуры NOTIFYICONDATA.
  • lParam Младшее слово содержит сообщение мыши. Например, если пользователь сделал правый щелчок по иконке, то lParam будет содержать WM_RBUTTONDOWN.

Обычно иконка в system tray показывает всплывающее меню при правом щелчке по ней. Этого можно добиться, если сначала создать само всплывающее меню, а затем вызывать TrackPopupMenu для его отображения. Шаги приведены ниже:

  • Создайте всплывающее меню, вызвав CreatePopupMenu. Эта функция создаёт пустое меню, и при успешном создании возвращает его хэндл в eax.
  • Добавьте пункты в меню с помощью AppendMenu, InsertMenu или InsertMenuItem.
  • Когда вам будет нужно отобразить всплывающее меню на месте курсора мыши, вызовите GetCursorPos, чтобы узнать текущие координаты курсора, а затем вызовите TrackPopupMenu, чтобы вывести меню на экран.
  • Когда пользователь щёлкнет на одном из пунктов меню, Windows отправит сообщение WM_COMMAND вашей оконной процедуре, точно так же, как и при работе с обычным меню.

Внимание: остерегайтесь следующих проблем, часто возникающих при работе со всплывающими меню.

  • Когда меню отображено на экране, щелчок вне меню не приводит к его немедленному исчезновению. Это происходит потому, что окно, которое будет получать уведомления от меню, ДОЛЖНО быть на переднем плане. Просто вызовите SetForegroundWindow, чтобы исправить эту проблему.
  • После вызова SetForegroundWindow вы обнаружите, что в первый раз всплывающее меню сработает нормально, но при последующем появлении оно будет отображаться, а затем тут же исчезать. Как написано в MSDN, это сделано «намеренно». Необходимо переключить задачу на программу, являющуюся владельцем иконки в system tray. Этого можно добиться, отправив любое сообщение окну вашей программы. Но только используйте PostMessage, а не SendMessage!

Программа отобразит на экране обычное окно. По нажатию кнопки «Свернуть» оно свернётся до иконки в system tray По двойному щелчку по иконке программа восстановит своё окно и удалит иконку из system tray. По правому щелчку будет выведено всплывающее меню, из которого можно восстановить программу или выйти из неё.

Когда будет создано главное окно, также создастся всплывающее меню, к которому затем будут добавлены два пункта. Функция AppendMenu имеет следующий синтаксис:

  • hMenu это хэндл меню, к которому вы хотите добавить пункт
  • uFlags информирует Windows о добавляемом пункте меню — изображение ли это, строка или отрисовываемый владельцем объект; включен ли он, неопределён или отключен, и т.д. Полный список есть в win32 api reference. В нашем случае мы используем флаг MF_STRING, который означает, что пункт меню — это строка.
  • uIDNewItem это ID пункта меню. Это значение определяется пользователем, и используется для обращения к пункту меню.
  • lpNewItem хранит содержание пункта меню, в зависимости от значения поля uFlags. Так как мы указали MF_STRING в поле uFlags, то lpNewItem должен содержать указатель на строку для отображения в пункте меню.

После того, как всплывающее меню создано, главное окно будет терпеливо ждать до тех пор, пока пользователь не нажмёт на кнопку «Свернуть».

Когда окно сворачивается, оно получает сообщение WM_SIZE со значением SIZE_MINIMIZED в wParam.

Мы используем этот момент, чтобы заполнить структуру NOTIFYICONDATA. IDI_TRAY это просто константа, определённая в начале исходного кода. Ей можно задать любое значение. Это не очень важно, так как у нас только одна иконка в system tray. Но если вы захотите поместить туда сразу несколько иконок, то вам потребуется задать уникальный ID для каждой из них. Мы выставляем сразу все флаги в поле uFlags, так как мы указываем иконку (NIF_ICON), мы указываем пользовательское сообщение (NIF_MESSAGE), а также текст всплывающей подсказки (NIF_TIP). WM_SHELLNOTIFY это просто пользовательское сообщение, определённое как WM_USER+5. Само значение не так важно, пока оно сохраняет свою уникальность. Я использовал логотип Windows в качестве иконки для этой программы, но вы можете использовать и любую другую иконку ;) Просто загрузите её из файла ресурсов вызовом LoadIcon и сохраните возвращаемое значение в поле hIcon. После всего этого поместим в поле szTip текст, который мы хотим видеть в качестве всплывающей подсказки к иконке.

Мы скрываем главное окно, чтобы создать эффект «сворачивания в иконку». Затем мы вызываем Shell_NotifyIcon с сообщением NIM_ADD, чтобы добавить иконку в system tray.

Теперь наше главное окно скрыто, а иконка успешно помещена в system tray. Если вы наведёте на неё курсор, то увидите подсказку с текстом, который вы поместили в поле szTip. Далее, если вы дважды щелкните по иконке, восстановится главное окно, а сама иконка исчезнет.

Когда над иконкой происходит событие мыши, ваше окно получает сообщение WM_SHELLNOTIFY, то есть пользовательское сообщение, указанное в поле uCallbackMessage. Напомню, что по приёму этого сообщения wParam содержит ID иконки, а lParam содержит событие мыши. В вышеприведенном коде сначала проверяется, пришло ли сообщение от интересующей нас иконки. Если да, то тогда мы смотрим на событие мыши. Так как нам нужны только правый щелчок и левый двойной щелчок, то мы обрабатываем лишь сообщения WM_RBUTTONDOWN и WM_LBUTTONDBLCLK.

Если сообщение от мыши это WM_RBUTTONDOWN, мы вызываем GetCursorPos, чтобы узнать текущие координаты курсора мыши. После возврата из функции, структура POINT содержит абсолютные координаты курсора. Под абсолютными координатами я подразумеваю координаты, привязанные ко всему экрану, не берущие во внимание границы окна. Например, если разрешение экрана 640*480, то правый нижний угол это x==639, y==479. Если вы желаете перевести абсолютные координаты в оконные, используйте функцию ScreenToClient.

Однако мы хотим отобразить всплывающее меню в точке, где сейчас расположен курсор мыши, с помощью функции TrackPopupMenu, которой требуются именно абсолютные координаты. Поэтому мы просто используем координаты, полученные от GetCursorPos.

TrackPopupMenu имеет следующий синтаксис: TrackPopupMenu PROTO hMenu:DWORD, uFlags:DWORD, x:DWORD, y:DWORD, nReserved:DWORD, hWnd:DWORD, prcRect:DWORD

  • hMenu это хэндл всплывающего меню, которое нужно отобразить.
  • uFlags указывает опции отображения. Например, как располагать меню относительно указанных ниже координат, и какая из кнопок мыши используется для отслеживания меню. В нашем примере мы используем флаг TPM_RIGHTALIGN, чтобы разместить меню слева от указанной точки.
  • x и y указывают местоположение меню в абсолютных координатах.
  • nReserved должно содержать NULL.
  • hWnd это хэндл окна, которое будет получать сообщения от меню.
  • prcRect это прямоугольная область экрана, щелчки в пределах которой НЕ будут приводить к исчезновению меню. Обычно сюда помещается NULL, чтобы меню исчезало при любом щелчке вне его.

Когда пользователь дважды щелкнёт по иконке, мы отправим нашему окну сообщение WM_COMMAND с указанием IDM_RESTORE, чтобы создать иллюзию выбора пользователем пункта «Восстановить» в меню, и таким образом восстановить окно, а также удалить иконку из system tray. Чтобы иметь возможность получать сообщения двойного щелчка, главное окно должно иметь стиль CS_DBLCLKS.

Когда пользователь выберет пункт «Восстановить» в меню, мы удаляем иконку повторным вызовом Shell_NotifyIcon, только на этот раз указывая NIM_DELETE в качестве сообщения. Затем мы возвращаем первозданный вид главному окну. Если пользователь выберет пункт «Закрыть», мы тоже удаляем иконку из system tray и уничтожаем главное окно вызовом DestroyWindow. © Iczelion, пер. WD-40

Илон Маск рекомендует:  Выравнивание таблиц

Как найти программу в системном трее

Команда тех. поддержки на who@whoer.net нередко просит найти значок клиента WhoerVPN в трее. Напомним, что после установки при запуске WhoerVPN значок появляется именно там. В этой статье мы расскажем, что такое системный трей, где он находится и чем может быть полезен.

Системный трей, что это такое и где он находится

Системный трей, он же область уведомлений, – один из элементов панели инструментов. В нем отображаются запущенные, но не используемые постоянно программы, еще говорят, что они запущены в фоновом режиме. Системный трей располагается в правом нижнем углу экрана возле часов.

Чтобы посмотреть, какие программы запущены на данный момент, необходимо нажать на иконку «Отображать скрытые значки». В области уведомлений чаще всего находятся сообщения операционной системы, ярлыки антивирусных программ, программ-скриншотеров, а также Whoer VPN и другие. Системный трей обеспечивает быстрый доступ к приложениям: для того, чтобы открыть окно программы нужно щелкнуть по соответствующему значку левой кнопкой мыши дважды, для дополнительных действий – щелкнуть один раз правой кнопкой мыши.

Для того, чтобы системный трей облегчал жизнь пользователя и не замедлял работу компьютера, необходимо следить за тем, какие значки в нем отображаются. Нередко в системный трей попадают программы без ведома пользователя. Большое количество значков в трее неизбежно приводит к замедлению работы системы в целом, так как каждая запущенная в фоновом режиме программа потребляет определенную часть ресурсов: процессорное время и оперативную память.

Настройка системного трея


Для настройки области уведомлений нажмите на иконку «Отображать скрытые значки» и выберите Настроить… В открывшемся окне настройте отображение значков и нажмите кнопку «ОК». Для настройки системных значков выберите соответствующий пункт в этом же окне. Так вы можете убрать или добавить часы, значок регулировки громкости, сети и другие.

Настройка автозагрузки

Чтобы отключить автозагрузку ненужных программ, воспользуйтесь командной строкой. Нажмите на клавиатуре одновременно клавиши Win и R. В открывшемся окне введите команду msconfig и нажмите «ОК»

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

Теперь вы знаете, что такое системный трей или область уведомлений и легко сможете найти значок Whoer VPN в трее, настроить клиент Whoer VPN или подключиться к серверу VPN. Также вы сможете настроить какие значки будут отображаться и какие программы будут загружаться автоматически при запуске операционной системы. Делитесь полезной информацией в социальных сетях.

Что такое системный трей Windows и для чего он нужен?

Сегодня речь пойдет о таком интересном понятии, как системный трей Windows (system tray). Научное определение трея – это область уведомлений или так называемый элемент панели инструментов рабочего стола.

Эта область уведомлений применяется для программ, которые работают в системе продолжительное время или же постоянно, но при этом используются редко. Это могут быть антивирусы, ICQ, Skype и прочий софт. Трей позволяет левой клавишей мыши вывести на экран интерфейсное окно необходимой программы. Путем несложной настройки с помощью специальных программ можно любую программу поместить в трей.

Немного из истории системного трея

Изначально, во времена Windows-95, системный трей использовался для вывода пользователю небольших системных сообщений, например, о начале или невозможности печати документа на принтере, о переполнении жесткого диска и т. д. В этом были и свои минусы. Многие программы помещали в трее свои значки, и он становился чересчур загроможденным.

С появлением Windows XP системный трей стал более современным в части отображения значков. Теперь появилась возможность его настраивать. Можно скрыть ненужные программы и показывать только те, которые требуются постоянно.

Как избавиться от значков удаленных программ в трее?

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

  1. Запустите редактор реестра, нажав «Пуск» – «Выполнить» или же сочетание клавиш «WIN + R«. В появившемся окне введите команду regedit, затем нажмите «Enter«.
  2. У вас появится окно с названием «Редактор реестра». Перейдите по пути:

Для изменения области уведомлений (системного трея) создано огромное число различных программ (платных и бесплатных). Они позволяют значительно увеличить его площадь, улучшить многие характеристики. Использовать их или нет – дело каждого. Важный нюанс – они расходуют оперативную память, особенно это ощущается, если компьютер слабый. Ну вот и все о системном трее на сегодня.

Faq system tray что такое иконка на system tray ?

При закрытии подписчики были переданы в рассылку «Обзор инструментов SEO-оптимизатора и методов продвижения» на которую и рекомендуем вам подписаться.

Вы можете найти рассылки сходной тематики в Каталоге рассылок.

Статистика

Практические советы по GTK+ (Иконка в System tray)

Иконка в System tray

Когда-то я хотел разобраться как делать апплеты для панелей GNOME и KDE, но меня удручало то, что они пишутся по разному, теперь, начиная с GTK 2.10 есть возможность создать иконку сразу для обоих панелей, и даже для Windows (в области уведомлений панели задач). И всё это без изменений исходного кода.

Правда для Windows иконка всегда будет размером 16×16 пикселей, но так устроена эта система.

Рассмотрим как это можно сделать, хотя всё предельно просто. Кстати, System tray я буду называть панелью задач.

Создать иконку для панели задач из ресурсов GTK:

GtkStatusIcon *tray_icon = gtk_status_icon_new();

Отобразить иконку на панели задач:

gtk_status_icon_set_visible (tray_icon, TRUE);

Удалить из панели задач:

gtk_status_icon_set_visible (tray_icon, FALSE); // скрыть иконку

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

Картинку для иконки можно брать не только из ресурсов, но и из других источников.

Вот неполный список источников для иконки в панель задач:

gtk_status_icon_new_from_stock(GtkStatusIcon *tray_icon, gchar *stock_id);

gtk_status_icon_set_from_file(GtkStatusIcon *tray_icon, gchar *filename);

gtk_status_icon_set_from_pixbuf(GtkStatusIcon *tray_icon, GdkPixbuf *pixbuf);

gtk_status_icon_set_from_gicon(GtkStatusIcon *tray_icon, GIcon *icon);

Для создания эффекта анимации картинки для иконки можно постоянно менять, например по таймеру.

Создать/поменять всплывающую подсказку:

gtk_status_icon_set_tooltip_text(tray_icon,»Этот текст появится во всплывающей подсказке к иконке»);

До GTK 2.16 вместо этой функции использовалась: gtk_status_icon_set_tooltip(tray_icon,»Текст во всплывающей подсказке»);

Заставить иконку мигать:

Отключить мигание иконки:

Рассмотрим обработку двух важных нестандартных событий:


«activate» — сигнал, который появляется при активации иконки. Этот сигнал платформо-зависимый, но обычно он появляется при двойном клике левой кнопкой мыши.

g_signal_connect (tray_icon,»activate»,G_CALLBACK(tray_icon_activated), NULL);

static void tray_icon_activated (GtkStatusIcon *icon, gpointer user_data)

; // здесь будет обработка полученного сигнала

«popup-menu» — сигнал, при котором должно появиться всплывающее меню. Этот сигнал также платформо-зависимый, но обычно он появляется при одиночном клике правой кнопкой мыши.

g_signal_connect (tray_icon,»popup-menu»,G_CALLBACK(tray_icon_popup_menu), NULL);

static void tray_icon_popup_menu(GtkStatusIcon *icon, guint button, guint32 activate_time, gpointer user_data)

GtkWidget *menu, *menuitem;

// создать всплывающее меню

// создать первый элемент меню

// вставить элемент меню во всплывающее меню

gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);

// создать второй элемент меню

// вставить элемент меню во всплывающее меню

gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);

// показать всплывающее меню

gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,button, activate_time);

Иконка системы Tray

Хорошо, сначала я только начал С#, поэтому я не совсем самый опытный программист. Ладно, так вот моя проблема, которая может показаться вам глупой, ребята;)

У меня есть достаточно простое приложение, которое меня попросил друг. До сих пор мне удалось с небольшим количеством Google, но я застрял в этом. Приложение работает нормально и сводится к системному лотку и максимально эффективно от системного лотка. Однако, когда я открываю вторую форму из этого приложения, она создает еще один значок в системном трее и начинает дублировать каждый раз, когда открываю другую форму. Поэтому в итоге у меня много значков, и все они являются отдельными экземплярами основной формы. События в системном лотке

Чтобы открыть форму:

Как я могу отобразить все формы на один и тот же значок в системном лотке?

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

Затем, если вы хотите:

  • Откройте одну форму: сохраните ссылку на последнюю форму в переменной и откройте ее.
  • Откройте все свернутые формы: пройдите по каждой форме и снова откройте их.

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

С другой стороны, если у вас действительно есть основная форма в приложении, которая открывает вторую форму (которая создает значок в трее), в этом случае вы просто нужно убедиться, что ваша вторая форма создается только один раз:

Переход по пунктам меню в system tray

11.04.2020, 16:31

Как скрыть приложение в системный лоток (System Tray)
Подскажите как скрыть приложение в системный лоток (System Tray) ?

Вывод пиктограмм к пунктам меню
Необходимо вывести пиктограмму для каждого пункта меню, основная проблема заключается в том, что.

Переход по пунктам меню
Здравствуйте, уважаемые программисты. У меня такой вопрос. Имеется меню:
На.

Как убрать меню с экрана после использования System Tray?
Всем доброго времени суток. Проблема в следующем: моя прога вставляет иконку в трей, при нажатии на.

Вывод меню с привязыными к пунктам этого меню материалами
Вывод меню с привязыными к пунктам этого меню материалами. Подскажите пожалуйста нет ли такого.

11.04.2020, 16:31

Работа с областью system tray
Помогите пожалуста решить задачу: написать программу, которая будет добавлять иконку в область.

Windows-служба и System Tray.
Есть работающее приложение, оформленное в виде Windows-службы с аккаунтом LocalSystem. Необходимо.

Как поместить иконку в System Tray?
Мне нужно поместить иконку в System Tray. Каим образом это можно сделать??

Faq system tray что такое иконка на system tray ?

Как попасть в System Tray? Приходит время, и начинающему Windows-программисту наскучивает открывать и закрывать окно с лозунгом «Hello, World». Его взгляд рассеянно блуждает по «рабочему столу» (не по тому, на котором стоит монитор, а по тому, что создан бессмертной Microsoft) и останавливается на правом нижнем его углу. Та часть панели задач, что привлекла его внимание, именуется «system tray» и содержит значки, которые магическим образом взаимодействуют с программами, работа которых «на первый взгляд как будто не видна» (эти программы нельзя «вызвать» с помощью комбинации [Alt]+[Tab]).

Вышеупомянутого программиста начинает мучить вопрос: а чем его творение хуже Clock, dr.Web, AVP и прочих (посмотрите на свой system tray и продолжите список). Почему бы не растолкать корифеев и не занять свое место под солнцем (точнее, под курсором «мыши») в этом уютном уголке.
В этой статье приводятся сведения, достаточные для того, чтобы любой программист, знакомый с принципами разработки приложений под Windows 9x, мог разместить значок в system tray и управлять им.
Как уже было сказано, system tray — это часть панели задач, которая включает в себя еще меню кнопки «Пуск», кнопки выбора приложения и всплывающее меню. Официальное название system tray — область состояния (status area). Сюда приложения могут размещать значки, которые информируют пользователя об их состоянии или о возникновении событий.
Размещая в этой области значок принтера, приложение сообщает о начале процесса печати. Если курсор «мыши» замрет над каким-нибудь значком, всплывает информационная строка: «паук» dr.Web сообщает о количестве проверенных/инфицированных файлов, «часы» показывают дату, «системный монитор» — количество свободных ресурсов.
Кроме того, значки system tray позволяют организовать обратную связь с пользователем для приложений, окна которых по ряду причин нежелательно размещать на «рабочем столе». Например, чтобы вызвать окно настройки громкости, нужно дважды щелкнуть «мышью» по значку «громкоговорителя». В этом смысле значки выполняют функцию окна приложения: информируют пользователя и принимают сообщения от «мыши».
Для работы со значками в области состояния предназначена всего одна функция WIN32 API — Shell_NotifyIcon. Она описана следующим образом:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA pnid);

При вызове параметр dwMessage должен содержать одно из следующих значений:
— NIM_ADD — добавить значок в область состояния,
— NIM_DEL — удалить значок из области состояния,
— NIM_MODIFY — изменить значок в области состояния.
Параметр pnid указывает на структуру типа NOTIFYICONDATA, значения полей которой зависят от параметра dwMessage.
Функция Shell_NotifyIcon возвращает ненулевое значение, если операция прошла успешно, и ноль в случае ошибки.
Рассмотрим подробнее структуру NOTIFYICONDATA. Она описана следующим образом:
typedef struct _NOTIFYICONDATA <
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
> NOTIFYICONDATA, *PNOTIFYICONDATA;
и ее поля имеют следующий смысл:
— cbSize — размер структуры NOTIFYICONDATA,
— hWnd — манипулятор окна, которое будет получать сообщения от значка в области состояния;
— uID — идентификатор значка. Это значение передается приложению в качестве первого параметра (WPARAM) сообщения от значка;
— uFlags — набор флагов, которые определяют, какие поля структуры заданы корректно. Могут использоваться следующие значения или их комбинации с помощью логического «ИЛИ»: NIF_ICON — поле hIcon корректно, NIF_MESSAGE — поле uCallbackMessage корректно, NIF_TIP — поле szTip корректно;
— uCallbackMessage — идентификатор сообщения, посылаемого окну hWnd при возникновении события «мыши» над значком в области состояния. Можно использовать значения WM_USER+N, где N — неотрицательное число;
— hIcon — манипулятор иконки, которую нужно разместить (изменить, удалить) в system tray;
— szTip — ASCIIZ-строка, которая будет использоваться в качестве «всплывающего» текста, когда указатель «мыши» остановится над значком. Если текст отсутствует, первый байт строки должен быть нулевым.
Перед вызовом функции Shell_NotifyIcon нужно подготовить экземпляр структуры NOTIFYICONDATA. Поля cbSize, hWnd и uID нужно заполнять всегда, остальные — по мере необходимости. В соответствии с заполнением полей uCallbackMessage, hIcon и szTip формируется поле флагов uFlags.
Чтобы добавить значок в область состояния, нужно вызвать функцию Shell_NotifyIcon, передав ей в качестве параметра dwMessage значение NIM_ADD, а в качестве pnid — указатель на инициализированный экземпляр структуры NOTIFYICONDATA. Если все выполнено правильно, функция вернет ненулевое значение, а в system tray появится новая иконка. Если планируется, что окно должно принимать сообщения от значка, следует обратить внимание, чтобы поле hWnd перед вызовом Shell_NotifyIcon было инициализировано значением манипулятора реально существующего окна. В противном случае значок будет исчезать из области состояния, как только над ним остановится указатель «мыши». Если было инициализировано поле uCallbackMessage, система будет посылать окну hWnd сообщения о событиях «мыши» над значком. При этом параметр сообщения WPARAM будет содержать идентификатор значка uID, а параметр LPARAM — тип сообщения.
Приложение, разместившее значок в system tray, может в любой момент изменить иконку или всплывающую подсказку. Для этого нужно внести изменения в соответствующие поля структуры NOTIFYICONDATA, поправить значение uFlags (значения cbSize, hWnd и uId изменяться не должны!) и вызвать функцию Shell_NotifyIcon со значением NIM_MODIFY в качестве параметра dwMessage.
Для удаления значка из system tray достаточно правильно заполнить поля cbSize, hWnd, u >Приведенные сведения позволяют программисту жонглировать значками в system tray как только он пожелает. Дополнительную информацию и примеры использования функции Shell_NotifyIcon и обработки сообщений «мыши» можно найти в «Win32 Programmer’s Reference», что поставляется в виде help-файла «Win32 online help» в составе Borland C++ 5.0.
Но если Вы программируете не на Ассемблере, а, к примеру, на C++, можно построить элегантный класс, который позволит еще больше упростить процесс работы со значками в области состояния.
Итак, за работу. Назовем наш класс SystemTrayIcon. Он должен содержать сведения о значке в области состояния и методы работы с ним. То есть он должен знать, как создать, модифицировать и удалить значок. Кроме того, в нем должна быть информация о том, размещен ли значок в system tray или еще нет.
Вся информация о значке содержится в структуре NOTIFYICONDATA, поэтому ее экземпляр можно поместить в класс, а чтобы защитить его от несанкционированного использования — ограничим доступ модификатором private. Туда же поместим логическую переменную fIsPlaced, которая будет принимать значение TRUE, если иконка размещена в system tray, и FALSE — в противном случае. Наш класс будет содержать следующие методы: конструктор (ну как же без него?), FAdd (размещает значок в system tray), FChangeIcon (изменяет иконку), FChangeTip (изменяет всплывающую подсказку), FDelete (удаляет значок из system tray) и деструктор. Запишем то, о чем сказано, в терминах C++:

Что же у нас получилось? Для размещения значка в system tray нужно прежде всего создать объект класса SystemTrayIcon. Конструктор инициализирует класс и присваивает члену fIsPlaced значение FALSE, что соответствует отсутствию значка в system tray. Для добавления значка в область состояния нужно воспользоваться методом FAdd, передав ему в качестве параметров все необходимые сведения о значке (эти параметры соответствуют аналогичным параметрам функции Shell_NotifyIcon, поэтому здесь не расписываются). Этот метод, как и методы FChangeIcon, FChangeTip, FDelete, возвращает TRUE в случае удачи и FALSE — в противном случае. Реализация методов выглядит следующим образом:

Чтобы изменить иконку, просто обращаемся к методу FChangeIcon с манипулятором новой иконки в качестве параметра. Все необходимые значения в классе уже сохранены. Аналогичным образом с помощью метода FChangeTip изменяется всплывающая подсказка. Удалить значок из system tray можно с помощью метода FDelete или просто уничтожив объект класса SystemTrayIcon (тогда деструктор сделает это автоматически).
Преимущества объектно-ориентированного подхода налицо. Ничто не мешает создать несколько объектов класса SystemTrayIcon и разместить в области состояния несколько значков. При дальнейшей работе с объектами нет необходимости задумываться над тем, какие поля инициализировать для изменения параметров значка или его удаления, нужно просто воспользоваться готовым методом. Удаление значков из system tray может выполняться автоматически при уничтожении соответствующего объекта.
Теперь можно подвести итоги. В статье рассмотрен способ размещения, удаления и работы со значками в system tray. Приведено описание функции Shell_NotifyIcon WIN32 API и объяснены ее параметры. В качестве примера построен С++ класс SystemTrayIcon, позволяющий упростить операции со значками в области состояния, и приведены реализации его методов. Надеюсь, что эта статья поможет кому-нибудь реализовать свои идеи в профессиональном воплощении и вдохновит на новые подвиги в области программирования под Windows. А ведь начиналось все с «Hello, World»!

Игорь Орещенков

Илон Маск рекомендует:  Основы для веб-разработчика «PHP, уровень 1»
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL