如何在AWT中的托盘栏通知中自定义程序名称?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在AWT中的托盘栏通知中自定义程序名称?相关的知识,希望对你有一定的参考价值。

AWT的TrayIcon类有一个名为displayMessage的方法,它显示了Windows 10中的本机操作系统消息,如下所示:

enter image description here

当像这样调用时:

Image image = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("/isotype.png"));
final TrayIcon trayIcon = new TrayIcon(image, appName());
trayIcon.displayMessage("Caption", "Text text text", TrayIcon.MessageType.INFO);

如何自定义字符串“Java(TM)Platform SE binary”。当我为我的应用程序构建一个自包含的exe时,它会读取“Blah.exe”而我更喜欢它,如果只读取“Blah”。

要打包应用程序,我通过优秀的JavaFX-Gradle-Plugin使用JavaFX工具链。

答案

一个解决方法是使用TrayIcon.MessageType.NONE。在这种情况下,您根本不会获得最后一行,但您也不会获得任何INFO,WARNING或ERROR图标。

但好处是您可以在显示的消息中获取应用程序图标。如果您使用TrayIcon等图像创建TrayIcon trayIcon = new TrayIcon(image, "Tooltip"),然后使用JavaFX-Gradle-Plugin打包您的应用程序,displayMessage方法将重用此图像,您将得到如下内容:

另一答案

TrayIcon的行为取决于平台。在Mac上,没有“Java(TM)Platform SE binary”这样的东西,也没有可执行文件。

如果你想改变平台上的行为,我猜你可以玩awt.toolkit。见https://docs.oracle.com/javase/8/docs/api/java/awt/Toolkit.html#getDefaultToolkit--

另一答案

在我的系统上(在Windows 10上尝试了Java 8u151和Java 9.0.1),使用来自build.gradlejavafx-gradle-plugin的最小设置,我没有找到该名称的任何配置选项,但我可以控制它:打包器只需要名称包含我的源的父目录。

“Foo Bar”示例: 可执行文件名=“FooBar.exe” 显示的名称=“Foo Bar” enter image description here

(然而,我没有得到的是为什么你看到“Blah.exe”而不是你父目录的名字......)

另一答案

要将弹出的文本更改为Java(TM) Platform SE binary中显示为Blah.exeBlah,您可以使用Resource Hacker™

Version Info部分中将FileDescription的值更改为Blah,可以在GUI中或在命令行上进行交互。

下面是一个简单的例子,需要根据您的需要进行修改。

包含VERSIONINFO资源信息的versioninfo.rc资源脚本

1 VERSIONINFO
{
BLOCK "StringFileInfo"
{
    BLOCK "00000409"
    {
        VALUE "FileDescription", "Blah"
    }
}

BLOCK "VarFileInfo"
{
    VALUE "Translation", 0x0000 0x0409
}
}

将资源脚本编译为资源文件

ResourceHacker.exe -open versioninfo.rc 
    -save versioninfo.res 
    -action compile 
    -log CONSOLE

将资源添加到可执行文件

ResourceHacker.exe -open Blah.exe 
    -save Blah_new.exe 
    -resource versioninfo.res 
    -action addoverwrite 
    -mask VERSIONINFO,1,0 
    -log CONSOLE

为了完整性,这里是从EXE文件中提取VERSIONINFO的命令。

 ResourceHacker.exe -open Blah.exe 
     -save versioninfo.rc 
     -action extract 
     -mask VERSIONINFO,, 
     -log CONSOLE

以上是关于如何在AWT中的托盘栏通知中自定义程序名称?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Android - 自定义通知托盘图标(状态栏)

csharp SingleInstance Windows窗体 - 托盘栏中的通知图标

如何Android中自定义Navigationbar

如何让VB生成的工程最小化后在通知区域而任务栏不显示?

如何在 Visual Studio 代码中自定义触摸栏?

如何在 Android 应用中自定义顶部状态栏?