如何实现用c语言在window右下角通知中心中输出字符串?

作者站长头像
站长
· 阅读数 6

题目描述

如何实现用c语言在window右下角通知中心中输出字符串?

题目来源及自己的思路

大一新生,刚刚开始接触c语言,最近遇到一个问题:c语言能不能不通过命令窗口,而是通过windows右下角的弹出通知进行输出呢?

相关代码

word[3]={"ab"};_

你期待的结果是什么?实际看到的错误信息又是什么?

右下角弹出通知“ab”,而未通过命令窗口;

回复
1个回答
avatar
test
2024-07-08

在 Windows 操作系统中,通知中心是通过 WinRT API 实现的,可以使用 C++/WinRT 或 C# 等语言来操作。如果你想使用 C 语言来实现,可以通过使用 Windows 运行时(Windows Runtime,简称 WinRT)的 C 语言绑定来实现。

具体步骤如下:

创建 WinRT 项目,并添加所需的引用库。可以使用 Visual Studio 来创建 WinRT 项目。在创建项目时,请选择“WinRT 组件库”模板,并添加所需的引用库(如 Windows.UI.Notifications)。

编写代码来创建通知和显示通知。下面是示例代码:

#include <Windows.h>
#include <wrl/client.h>
#include <windows.ui.notifications.h>
#include <windows.data.xml.dom.h>

using namespace Microsoft::WRL;
using namespace Windows::UI::Notifications;
using namespace Windows::Data::Xml::Dom;

int main()
{
    HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
    if (FAILED(hr))
    {
        return 1;
    }

    ComPtr<IToastNotificationManagerStatics> toastStatics;
    hr = RoGetActivationFactory(
        HStringReference(L"Windows.UI.Notifications.ToastNotificationManager").Get(),
        __uuidof(IToastNotificationManagerStatics),
        reinterpret_cast<void**>(toastStatics.GetAddressOf()));
    if (FAILED(hr))
    {
        return 1;
    }

    ComPtr<IToastNotificationFactory> toastFactory;
    hr = RoGetActivationFactory(
        HStringReference(L"Windows.UI.Notifications.ToastNotification").Get(),
        __uuidof(IToastNotificationFactory),
        reinterpret_cast<void**>(toastFactory.GetAddressOf()));
    if (FAILED(hr))
    {
        return 1;
    }

    ComPtr<IXmlDocument> toastXml;
    hr = toastStatics->GetTemplateContent(ToastTemplateType_ToastText01, toastXml.GetAddressOf());
    if (FAILED(hr))
    {
        return 1;
    }

    WCHAR message[] = L"Hello, world!";
    ComPtr<IXmlNodeList> toastTextElements;
    hr = toastXml->GetElementsByTagName(HStringReference(L"text").Get(), toastTextElements.GetAddressOf());
    if (FAILED(hr))
    {
        return 1;
    }

    ComPtr<IXmlNode> toastTextElement;
    hr = toastTextElements->Item(0, toastTextElement.GetAddressOf());
    if (FAILED(hr))
    {
        return 1;
    }

    ComPtr<IXmlText> toastText;
    hr = toastXml->CreateTextNode(HStringReference(message).Get(), toastText.GetAddressOf());
    if (FAILED(hr))
    {
        return 1;
    }

    hr = toastTextElement->AppendChild(toastText.Get(), nullptr);
    if (FAILED(hr))
    {
        return 1;
    }

    ComPtr<IToastNotification> toast;
    hr = toastFactory->CreateToastNotification(toastXml.Get(), toast.GetAddressOf());
    if (FAILED(hr))
    {
        return 1;
    }

    ComPtr<IToastNotifier> notifier;
    hr = toastStatics->CreateToastNotifierWithId(HStringReference(L"MyApp").Get(), notifier.GetAddressOf());
    if (FAILED(hr))
    {
        return 1;
    }

    hr = notifier->Show(toast.Get());
    if (FAILED(hr))
    {
        return 1;
    }

    return 
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容