mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
75 lines
2.7 KiB
C#
75 lines
2.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.InteropServices;
|
|
using Microsoft.Win32;
|
|
|
|
namespace Wabbajack.Common
|
|
{
|
|
public class ExtensionManager
|
|
{
|
|
[DllImport("Shell32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);
|
|
|
|
public static string Extension = ".wabbajack";
|
|
|
|
private static readonly string ProgIDPath = "Software\\Classes\\Wabbajack";
|
|
private static readonly string ExtPath = $"Software\\Classes\\{Extension}";
|
|
|
|
private static readonly Dictionary<string, string> ProgIDList = new Dictionary<string, string>
|
|
{
|
|
{"", "Wabbajack"},
|
|
{"FriendlyTypeName", "Wabbajack"},
|
|
{"shell\\open\\command", "\"{appPath}\" -i=\"%1\""},
|
|
};
|
|
|
|
private static readonly Dictionary<string, string> ExtList = new Dictionary<string, string>
|
|
{
|
|
{"", "Wabbajack"},
|
|
{"PerceivedType", "Compressed"}
|
|
};
|
|
|
|
public static bool NeedsUpdating(string appPath)
|
|
{
|
|
var progIDKey = Registry.CurrentUser.OpenSubKey(ProgIDPath);
|
|
var tempKey = progIDKey?.OpenSubKey("shell\\open\\command");
|
|
if (progIDKey == null || tempKey == null) return true;
|
|
var value = tempKey.GetValue("");
|
|
return value == null || value.ToString().Equals($"\"{appPath}\" -i=\"%1\"");
|
|
}
|
|
|
|
public static bool IsAssociated()
|
|
{
|
|
var progIDKey = Registry.CurrentUser.OpenSubKey(ProgIDPath);
|
|
var extKey = Registry.CurrentUser.OpenSubKey(ExtPath);
|
|
return progIDKey != null && extKey != null;
|
|
}
|
|
|
|
public static void Associate(string appPath)
|
|
{
|
|
var progIDKey = Registry.CurrentUser.CreateSubKey(ProgIDPath, RegistryKeyPermissionCheck.ReadWriteSubTree);
|
|
foreach (var entry in ProgIDList)
|
|
{
|
|
if (entry.Key.Contains("\\"))
|
|
{
|
|
var tempKey = progIDKey?.CreateSubKey(entry.Key);
|
|
tempKey?.SetValue("", entry.Value.Replace("{appPath}", appPath));
|
|
}
|
|
else
|
|
{
|
|
progIDKey?.SetValue(entry.Key, entry.Value.Replace("{appPath}", appPath));
|
|
}
|
|
}
|
|
|
|
var extKey = Registry.CurrentUser.CreateSubKey(ExtPath, RegistryKeyPermissionCheck.ReadWriteSubTree);
|
|
foreach (var entry in ExtList)
|
|
{
|
|
extKey?.SetValue(entry.Key, entry.Value);
|
|
}
|
|
|
|
progIDKey?.Close();
|
|
extKey?.Close();
|
|
SHChangeNotify(0x000000, 0x0000, IntPtr.Zero, IntPtr.Zero);
|
|
}
|
|
}
|
|
}
|