Files
App-Installer-For-Windows-8…/ModernNotice/Notice.cs
2026-01-20 22:34:22 +08:00

121 lines
4.5 KiB
C#

using System.Xml;
using System.Runtime.InteropServices;
using HResult = DataUtils._I_HResult;
using System;
namespace ModernNotice
{
public static class Notice
{
private static XmlDocument XmlStringToDom (string xmlContent)
{
var ret = new XmlDocument ();
ret.LoadXml (xmlContent);
return ret;
}
private static string XmlDomToString (XmlDocument xmlDom) { return xmlDom.OuterXml; }
private static HResult BuildHResult (int hr, IntPtr err, IntPtr msg) { return new HResult (hr, Marshal.PtrToStringUni (err), Marshal.PtrToStringUni (msg)); }
private static HResult BuildHResult (HRESULT hr, IntPtr err, IntPtr msg) { return BuildHResult (hr.Value, err, msg); }
private static HResult BuildHResult (int hr, IntPtr msg) { return new HResult (hr, "", Marshal.PtrToStringUni (msg)); }
private static HResult BuildHResult (HRESULT hr, IntPtr msg) { return BuildHResult (hr.Value, msg); }
private static HResult BuildHResult (int hr) { return new HResult (hr); }
private static HResult BuildHResult (HRESULT hr) { return BuildHResult (hr.Value); }
public static string GetTemplateString (string templateName)
{
var ptr = Native.GetToastNoticeXml (templateName);
try { var ret = Marshal.PtrToStringUni (ptr) ?? ""; return ret; }
finally { Native.NoticeApiFreeString (ptr); }
}
public static XmlDocument GetTemplate (string templateName) { return XmlStringToDom (GetTemplateString (templateName)); }
public static string GetSimpleTemplateString (string content, string imagePath)
{
var ptr = Native.GenerateSimpleToastNoticeXml (content, imagePath);
try { var ret = Marshal.PtrToStringUni (ptr) ?? ""; return ret; }
finally { Native.NoticeApiFreeString (ptr); }
}
public static XmlDocument GetSimpleTemplate (string content, string imagePath = null) { return XmlStringToDom (GetSimpleTemplateString (content, imagePath)); }
public static string GetSimpleTemplateString2 (string title, string content = null, string imagePath = null)
{
var ptr = Native.GenerateSimpleToastNoticeXml2 (title, content, imagePath);
try { var ret = Marshal.PtrToStringUni (ptr) ?? ""; return ret; }
finally { Native.NoticeApiFreeString (ptr); }
}
public static XmlDocument GetSimpleTemplate2 (string title, string content = null, string imagePath = null) { return XmlStringToDom (GetSimpleTemplateString2 (title, content, imagePath)); }
public static HResult Create (string appUserId, XmlDocument xml)
{
IntPtr dt = IntPtr.Zero;
try
{
var hr = Native.CreateToastNoticeFromXmlDocument (appUserId, XmlDomToString (xml), null, IntPtr.Zero, out dt);
return BuildHResult (hr, dt);
}
finally
{
if (dt != IntPtr.Zero) Native.NoticeApiFreeString (dt);
}
}
public static HResult Create (string appUserId, string content, string imagePath = null)
{
var xml = GetSimpleTemplate (content, imagePath);
return Create (appUserId, xml);
}
public static HResult Create (string appUserId, string title, string content, string imagePath = null)
{
var xml = GetSimpleTemplate2 (title, content, imagePath);
return Create (appUserId, xml);
}
public static HResult Create (string appUserId, string content, IntPtr img)
{
IntPtr dt = IntPtr.Zero;
try
{
var hr = Native.CreateToastNoticeWithIStream (appUserId, content, img, null, IntPtr.Zero, out dt);
return BuildHResult (hr, dt);
}
finally
{
if (dt != IntPtr.Zero) Native.NoticeApiFreeString (dt);
}
}
public static HResult Create (string appUserId, string title, string content, IntPtr img)
{
IntPtr dt = IntPtr.Zero;
try
{
var hr = Native.CreateToastNoticeWithIStream2 (appUserId, title, content, img, null, IntPtr.Zero, out dt);
return BuildHResult (hr, dt);
}
finally
{
if (dt != IntPtr.Zero) Native.NoticeApiFreeString (dt);
}
}
public static HResult CreateWithImgBase64 (string appUserId, string content, string imageBase64)
{
IntPtr dt = IntPtr.Zero;
try
{
var hr = Native.CreateToastNoticeWithImgBase64 (appUserId, content, imageBase64, null, IntPtr.Zero, out dt);
return BuildHResult (hr, dt);
}
finally
{
if (dt != IntPtr.Zero) Native.NoticeApiFreeString (dt);
}
}
public static HResult CreateWithImgBase64 (string appUserId, string title, string content, string imageBase64)
{
IntPtr dt = IntPtr.Zero;
try
{
var hr = Native.CreateToastNotice2WithImgBase64 (appUserId, title, content, imageBase64, null, IntPtr.Zero, out dt);
return BuildHResult (hr, dt);
}
finally
{
if (dt != IntPtr.Zero) Native.NoticeApiFreeString (dt);
}
}
}
}