如何实现用c语言在window右下角通知中心中输出字符串?
题目描述
如何实现用c语言在window右下角通知中心中输出字符串?
题目来源及自己的思路
大一新生,刚刚开始接触c语言,最近遇到一个问题:c语言能不能不通过命令窗口,而是通过windows右下角的弹出通知进行输出呢?
相关代码
word[3]={"ab"};_
你期待的结果是什么?实际看到的错误信息又是什么?
右下角弹出通知“ab”,而未通过命令窗口;
回复
1个回答
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
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容