有效的方法制作系统托盘应用程序

3
这是我在Stack Overflow上的第一篇文章,我想了解制作系统托盘应用程序的选项。该应用程序将主要运行于系统托盘,但仍可以在单击时显示窗口。还需要一些全局按键跟踪支持,以打开窗口。
我很好奇有哪些可用的选项,因为我知道有许多方法可以实现这个目标。虽然我最熟悉Java,但我对C++也有一些经验。如果其他语言具有明显的优势,我愿意尝试探索它们,但使用我已知的方式工作会更好。
谢谢。
3个回答

7
Java 6具有新功能,允许创建使用系统托盘的应用程序。 Java SE 6中的新系统托盘功能文章详细介绍了此功能,并提供了一些示例代码。 SystemTrayTrayIcon类是java.awt包中新增加的,可用于向系统托盘添加图标。这些图标可以响应鼠标单击并使用弹出菜单。然而,这个新功能是AWT的一部分,所以它不能很好地与Swing组件集成。
这是一个使用Java 6中的SystemTray和TrayIcon类创建的小时钟示例,显示在系统托盘中: System tray clock application in Java (来源: coobird.net)

谢谢您的建议,我会尝试使用Java。虽然我也可能尝试Foredecker提出的使用WTL的建议。我认为选择C++ WTL路线在性能方面会更好,但我不知道差距有多大(如果真的很明显),虽然我想这实际上取决于应用本身。非常感谢您对此事的投入。 - Blitz Bolt

1

我会选择传统的Winforms。

如果你熟悉Java,使用.NET中的一种托管语言创建简单的托盘应用程序应该不会有太大困难。

这里提供了正确创建托盘应用程序的建议。


0

在这里要小心托管应用程序和Java。托盘应用程序一直在运行。因此,如果它们编写得不好,它们可能会使用足够的系统资源来干扰其他事情。

托管代码或Java本身没有问题,但是保持托管或Java应用程序节约内存、I/O和CPU时间可能更加困难。

我是Windows性能团队的开发经理,我们看到了很多非常占用资源的托盘应用程序。是的,有些甚至是Windows或微软的应用程序。

编写一个非常小而轻量级的托盘应用程序,在用户需要时启动更丰富的进程可能是更好的方法。您可以在低级Win32 API之上使用简单的C++编写尝试应用程序。如果您不想直接使用Win32 API,可以使用Windows Template Library


毫无疑问,对于长时间运行的应用程序而言,内存方面很容易出现问题。但是按照您的理解,使用托盘应用程序作为薄 UI 层在托管语言中编写也是安全的(并且可能比使用 win32 更快) :) - Dan
这并不是真的。特别是在关于内存方面,使用受控语言和Java与本地应用程序相比更难以节约。我已经看到了许多例子。例如,在Coobird的示例中,小时钟的大小很可能比使用本地代码编写时要大得多。这尤其正确,因为它始终处于活动状态。注意!我并不是说使用受控或Java应用程序在这里是错误的选择 - 只是需要额外小心,以防止它们使用过多的资源。 - Foredecker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接