50 lines
1.6 KiB
C#
50 lines
1.6 KiB
C#
using System.Runtime.InteropServices;
|
|
|
|
namespace EmbyToolbox.Interop;
|
|
|
|
/// <summary>Вызов SetCurrentProcessExplicitAppUserModelID до показа окон/unpackaged toasts Windows.</summary>
|
|
internal static class AppUserModelIdRegistration
|
|
{
|
|
[DllImport("shell32.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false)]
|
|
private static extern int SetCurrentProcessExplicitAppUserModelID(string appID);
|
|
|
|
public static string? LastRegisteredId { get; private set; }
|
|
public static int LastHr { get; private set; }
|
|
public static string? LastDiagnostics { get; private set; }
|
|
|
|
/// <returns>true, если получен код 0 (S_OK).</returns>
|
|
public static bool TryRegister(string appUserModelId)
|
|
{
|
|
LastDiagnostics = null;
|
|
if (!OperatingSystem.IsWindowsVersionAtLeast(6, 1))
|
|
{
|
|
LastDiagnostics = "требуется Windows.";
|
|
LastHr = -1;
|
|
return false;
|
|
}
|
|
|
|
try
|
|
{
|
|
var hr = SetCurrentProcessExplicitAppUserModelID(appUserModelId);
|
|
LastHr = hr;
|
|
LastRegisteredId = hr == 0 ? appUserModelId : null;
|
|
|
|
if (hr != 0)
|
|
{
|
|
LastDiagnostics =
|
|
$"SetCurrentProcessExplicitAppUserModelID вернул 0x{hr:X8} для «{appUserModelId}».";
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LastHr = -2;
|
|
LastDiagnostics = $"{ex.GetType().Name}: {ex.Message}";
|
|
LastRegisteredId = null;
|
|
return false;
|
|
}
|
|
}
|
|
}
|