首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在Windows10上触发来自Vala MSYS2的弹出通知?

有没有办法在Windows10上触发来自Vala MSYS2的弹出通知?
EN

Stack Overflow用户
提问于 2019-01-04 20:56:46
回答 1查看 208关注 0票数 1

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

在使用libnoyify时,我看到

代码语言:javascript
复制
    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

在这样的代码中

代码语言:javascript
复制
    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,但我不认为它适用于Windows10,它似乎在2011年停止了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-04 21:34:27

为了理解到底发生了什么,我将其分解为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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54039413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档