我不喜欢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年停止使用。
答案 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.Notifications
,Flatpak,macOS和Windows。不幸的是,当前Windows实现是just a place holder。有一个issue to fix this。