2025-11-28 00:35:46 +09:00

43 lines
1.2 KiB
C#

using System;
using System.Runtime.InteropServices;
namespace DesktopToastsSample
{
internal class PropVariantHelper
{
private static class NativeMethods
{
[DllImport("Ole32.dll", PreserveSig = false)]
internal static extern void PropVariantClear(ref ShellHelpers.PROPVARIANT pvar);
}
private ShellHelpers.PROPVARIANT variant;
public ShellHelpers.PROPVARIANT Propvariant
{
get { return variant; }
}
public VarEnum VarType
{
get { return (VarEnum)variant.vt; }
set { variant.vt= (ushort)value; }
}
public void SetValue(Guid value)
{
NativeMethods.PropVariantClear(ref variant);
byte[] guid = ((Guid)value).ToByteArray();
variant.vt = (ushort)VarEnum.VT_CLSID;
variant.unionmember = Marshal.AllocCoTaskMem(guid.Length);
Marshal.Copy(guid, 0, variant.unionmember, guid.Length);
}
public void SetValue(string val)
{
NativeMethods.PropVariantClear(ref variant);
variant.vt = (ushort)VarEnum.VT_LPWSTR;
variant.unionmember = Marshal.StringToCoTaskMemUni(val);
}
}
}