有没有办法从Windows 10上的Vala MSYS2触发弹出通知?

时间:2019-01-04 12:56:46

标签: windows popup vala notify msys2

我不喜欢Windows,我只想查看Vala跨平台的情况。

使用libnoyify时看到

    gavr@DESKTOP-B57MHT8 MINGW64 ~
$ ./notify.exe

** (notify.exe:6680): ERROR **: 15:50:47.138: notify.vala:13: Error: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications is unknown

使用类似的代码

    public static int main (string[] args) {
        string summary = "Short summary";
        string body = "A long description";
        string icon = "dialog-information";

        Notify.init ("My test app");

        try {
            Notify.Notification notification = new Notify.Notification (summary, body, icon);
            notification.show ();
        } catch (Error e) {
            error ("Error

: %s", e.message);
    }
    return 0;
}

那么有没有办法触发Vala的弹出通知?

我发现的只是this,但我认为它不适合Windows 10,它似乎已于2011年停止使用。

1 个答案:

答案 0 :(得分:2)

要了解发生了什么,我将其分为Vala,GTK +,系统通知和D-Bus。

似乎您已经编译了程序并在Windows上运行了它。因此Vala和C编译器已完成工作,并生成了可在Windows上运行的二进制文件。 Vala通常与GTK +图形工具包一起使用,而GTK +对于创建窗口和处理输入等使用不同的GDK backends。 GTK +还使用不同的Cairo backends跨平台呈现窗口小部件。 GDK和Cairo在Windows上使用Windows API,在macOS上使用Quartz API,等等。

系统范围的通知似乎不像GDK和Cairo那样跨平台。 Unix的通用标准是Freedesktop.org notification specification。该规范利用D-Bus与系统范围的通知实现进行进程间通信。在Linux和其他类似Unix的平台上,这很好用。要求是D-Bus正在运行,并且有org.freedesktop.Notifications的实现。

在Windows上,我不确定D-Bus是否有效。 Windows可能有TCP实现,但是Unix上使用了Unix套接字。如果D-Bus可以在Windows上运行,则还需要实现org.freedesktop.Notifications,该实现将D-Bus消息转换为Windows API的通知。因此有可能,但我找不到实现。

更新

@AlexB GIO的GNotification指出,它提供了跨平台系统的通知。这包括org.freedesktop.NotificationsFlatpakmacOSWindows。不幸的是,当前Windows实现是just a place holder。有一个issue to fix this