69 lines
3.6 KiB
C#
69 lines
3.6 KiB
C#
|
|
using Microsoft.Win32;
|
|
|
|
using MpvNet.Windows.Help;
|
|
|
|
namespace MpvNet.Windows;
|
|
|
|
public static class FileAssociation
|
|
{
|
|
public static void Register(string perceivedType, string[] extensions)
|
|
{
|
|
string exePath = Environment.ProcessPath!;
|
|
string exeFilename = Path.GetFileName(exePath);
|
|
string exeFilenameNoExt = Path.GetFileNameWithoutExtension(exePath);
|
|
|
|
string[] protocols = { "ytdl", "rtsp", "srt", "srtp" };
|
|
|
|
if (perceivedType != "unreg")
|
|
{
|
|
foreach (string it in protocols)
|
|
{
|
|
RegistryHelp.SetValue($@"HKCR\{it}", $"{it.ToUpper()} Protocol", "");
|
|
RegistryHelp.SetValue($@"HKCR\{it}\shell\open\command", "", $"\"{exePath}\" \"%1\"");
|
|
}
|
|
|
|
RegistryHelp.SetValue(@"HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\" + exeFilename, "", exePath);
|
|
RegistryHelp.SetValue(@"HKCR\Applications\" + exeFilename, "FriendlyAppName", "mpv.net media player");
|
|
RegistryHelp.SetValue(@"HKCR\Applications\" + exeFilename + @"\shell\open\command", "", $"\"{exePath}\" \"%1\"");
|
|
RegistryHelp.SetValue(@"HKCR\SystemFileAssociations\video\OpenWithList\" + exeFilename, "", "");
|
|
RegistryHelp.SetValue(@"HKCR\SystemFileAssociations\audio\OpenWithList\" + exeFilename, "", "");
|
|
RegistryHelp.SetValue(@"HKLM\SOFTWARE\RegisteredApplications", "mpv.net", @"SOFTWARE\Clients\Media\mpv.net\Capabilities");
|
|
RegistryHelp.SetValue(@"HKLM\SOFTWARE\Clients\Media\mpv.net\Capabilities", "ApplicationDescription", "mpv.net media player");
|
|
RegistryHelp.SetValue(@"HKLM\SOFTWARE\Clients\Media\mpv.net\Capabilities", "ApplicationName", "mpv.net");
|
|
|
|
foreach (string ext in extensions)
|
|
{
|
|
RegistryHelp.SetValue(@"HKCR\Applications\" + exeFilename + @"\SupportedTypes", "." + ext, "");
|
|
RegistryHelp.SetValue(@"HKCR\" + "." + ext, "", exeFilenameNoExt + "." + ext);
|
|
RegistryHelp.SetValue(@"HKCR\" + "." + ext + @"\OpenWithProgIDs", exeFilenameNoExt + "." + ext, "");
|
|
RegistryHelp.SetValue(@"HKCR\" + "." + ext, "PerceivedType", perceivedType);
|
|
RegistryHelp.SetValue(@"HKCR\" + exeFilenameNoExt + "." + ext + @"\shell\open\command", "", $"\"{exePath}\" \"%1\"");
|
|
RegistryHelp.SetValue(@"HKLM\SOFTWARE\Clients\Media\mpv.net\Capabilities\FileAssociations", "." + ext, exeFilenameNoExt + "." + ext);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (string i in protocols)
|
|
RegistryHelp.RemoveKey($@"HKCR\{i}");
|
|
|
|
RegistryHelp.RemoveKey(@"HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\" + exeFilename);
|
|
RegistryHelp.RemoveKey(@"HKCR\Applications\" + exeFilename);
|
|
RegistryHelp.RemoveKey(@"HKLM\SOFTWARE\Clients\Media\mpv.net");
|
|
RegistryHelp.RemoveKey(@"HKCR\SystemFileAssociations\video\OpenWithList\" + exeFilename);
|
|
RegistryHelp.RemoveKey(@"HKCR\SystemFileAssociations\audio\OpenWithList\" + exeFilename);
|
|
|
|
RegistryHelp.RemoveValue(@"HKLM\SOFTWARE\RegisteredApplications", "mpv.net");
|
|
|
|
foreach (string id in Registry.ClassesRoot.GetSubKeyNames())
|
|
{
|
|
if (id.StartsWith(exeFilenameNoExt + "."))
|
|
Registry.ClassesRoot.DeleteSubKeyTree(id);
|
|
|
|
RegistryHelp.RemoveValue($@"HKCR\Software\Classes\{id}\OpenWithProgIDs", exeFilenameNoExt + id);
|
|
RegistryHelp.RemoveValue($@"HKLM\Software\Classes\{id}\OpenWithProgIDs", exeFilenameNoExt + id);
|
|
}
|
|
}
|
|
}
|
|
}
|