Эффективный способ сделать приложение в системном трее

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

Мне любопытно, какие варианты у меня есть, поскольку я уверен, что есть много способов сделать это. Я больше всего знаком с Java, хотя у меня есть некоторый опыт работы с C ++. Я готов исследовать другие языки, если у них есть определенные преимущества, хотя было бы неплохо поработать с тем, что я знаю в некотором роде.

Спасибо


person Community    schedule 23.06.2009    source источник


Ответы (3)


В Java 6 добавлены новые функции, позволяющие создавать приложения, использующие панель задач.

В статье Новые функции панели задач в Java SE 6 говорится в деталях, а также предоставляет несколько примеров кода.

Недавно добавленные SystemTray и _ 2_ классов _ 3_ можно использовать для добавления значков в панель задач. Значки могут реагировать на щелчки мыши, а также использовать всплывающие меню. Однако эта новая функциональность является частью AWT, поэтому она не очень хорошо интегрируется с компонентами Swing.

Вот пример маленьких часов, которые отображаются в системном трее, которые были созданы с использованием классов SystemTray и TrayIcon в Java 6:

Приложение часов на панели задач в Java
(источник: coobird .net)

person coobird    schedule 23.06.2009
comment
Спасибо за предложение, попробую java. Хотя я мог бы также попробовать предложение использовать WTL, которое предложил Foredecker. Я бы предположил, что маршрут C ++ WTL будет лучше с точки зрения производительности, хотя мне интересно, насколько (если это действительно заметно, хотя я предполагаю, что на самом деле это в некотором смысле зависит от самого приложения). Спасибо за ваш вклад в этот вопрос. - person ; 23.06.2009

Мой голос получил бы простой старый Winforms.

Если вы знакомы с Java, у вас не должно возникнуть проблем с использованием одного из управляемых языков для создания простого приложения в области уведомлений с .NET.

Вот несколько советов по правильному способу создания лотка. приложение.

person Dan    schedule 23.06.2009

Будьте осторожны с управляемыми приложениями и Java. Приложения в трее запускаются постоянно. Итак, если они плохо написаны, они могут использовать достаточно системных ресурсов, чтобы мешать другим вещам.

Нет ничего плохого в управляемом коде или Java в целом, но может быть сложнее сохранить управляемые или java-приложения экономно с памятью, вводом-выводом и временем процессора.

Я говорю это как менеджер по разработке в команде Windows perf - мы видели много-много очень сложных приложений. Да, некоторые из них даже являются приложениями Windows или MSFT.

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

person Foredecker    schedule 23.06.2009
comment
Несомненно, что долго работающее приложение легко может запутаться в том, что касается памяти. Но по вашему разумению было бы также безопасно (и, возможно, быстрее, чем при использовании win32) написать тонкий слой пользовательского интерфейса в виде приложения в трее на управляемом языке :) - person Dan; 23.06.2009
comment
Это не правда. Особенно с памятью, с управляемыми языками и Java труднее экономить, чем с собственными приложениями. Я видел много примеров этого. Например, маленькие часы в примере с Coobird, скорее всего, намного больше, чем если бы они были написаны на собственном коде. Это особенно верно, поскольку он всегда активен. Примечание! Я не говорю, что управляемые или java-приложения здесь - неправильный выбор - просто нужно проявлять особую осторожность, чтобы они не использовали слишком много ресурсов. - person Foredecker; 23.06.2009