mirror of https://github.com/dahall/Vanara.git
63 lines
1.6 KiB
C#
63 lines
1.6 KiB
C#
|
using System;
|
|||
|
using System.Security;
|
|||
|
using static Vanara.PInvoke.Kernel32;
|
|||
|
|
|||
|
namespace Vanara.Windows.Forms
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Activation context that forces the loading of the v6 COMCTL32.DLL. <note type="note">This is not needed if the application has a
|
|||
|
/// manifest including COMCTL32 or if Application.RenderWithVisualStyles is set.</note>
|
|||
|
/// </summary>
|
|||
|
/// <remarks>
|
|||
|
/// <para>Use as follows for all items that require the 6.0 or later version of COMCTL32:</para>
|
|||
|
/// <code lang="cs">
|
|||
|
/// using (new ComCtl32v6Context())
|
|||
|
/// {
|
|||
|
/// // Code that needs the right lib
|
|||
|
/// TaskDialog.Show(...)
|
|||
|
/// }
|
|||
|
/// </code>
|
|||
|
/// </remarks>
|
|||
|
/// <seealso cref="System.IDisposable"/>
|
|||
|
[SuppressUnmanagedCodeSecurity]
|
|||
|
public class ComCtl32v6Context : IDisposable
|
|||
|
{
|
|||
|
private ActCtxSafeHandle hActCtx;
|
|||
|
private IntPtr localCookie;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Initializes a new instance of the <see cref="ComCtl32v6Context"/> class.
|
|||
|
/// </summary>
|
|||
|
public ComCtl32v6Context()
|
|||
|
{
|
|||
|
if (Environment.OSVersion.Version.Major < 6) return;
|
|||
|
var actctx = new ACTCTX(GetType().Assembly.Location)
|
|||
|
{
|
|||
|
dwFlags = ActCtxFlags.ACTCTX_FLAG_RESOURCE_NAME_VALID,
|
|||
|
lpResourceName = "#2"
|
|||
|
};
|
|||
|
Create(ref actctx);
|
|||
|
Activate();
|
|||
|
}
|
|||
|
|
|||
|
void IDisposable.Dispose()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if ((localCookie != IntPtr.Zero) && DeactivateActCtx(0, localCookie))
|
|||
|
localCookie = IntPtr.Zero;
|
|||
|
hActCtx.Dispose();
|
|||
|
}
|
|||
|
catch { }
|
|||
|
}
|
|||
|
|
|||
|
private void Activate()
|
|||
|
{
|
|||
|
if (hActCtx != null && !ActivateActCtx(hActCtx, out localCookie))
|
|||
|
localCookie = IntPtr.Zero;
|
|||
|
}
|
|||
|
|
|||
|
private void Create(ref ACTCTX context) { hActCtx = CreateActCtx(ref context); }
|
|||
|
}
|
|||
|
}
|