initial commit
This commit is contained in:
commit
1b60743303
274 changed files with 25866 additions and 0 deletions
249
SEGATools/Registry/FileAssociationInfo.cs
Normal file
249
SEGATools/Registry/FileAssociationInfo.cs
Normal file
|
@ -0,0 +1,249 @@
|
|||
// Decompiled with JetBrains decompiler
|
||||
// Type: SEGATools.Registry.FileAssociationInfo
|
||||
// Assembly: SEGATools, Version=1.0.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
|
||||
// MVID: D631183F-57B1-40A1-B502-5364D288307A
|
||||
// Assembly location: SEGATools.dll
|
||||
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SEGATools.Registry
|
||||
{
|
||||
public class FileAssociationInfo
|
||||
{
|
||||
private RegistryWrapper registryWrapper = new RegistryWrapper();
|
||||
private string extension;
|
||||
|
||||
public static string[] GetExtensions()
|
||||
{
|
||||
RegistryKey classesRoot = Microsoft.Win32.Registry.ClassesRoot;
|
||||
List<string> stringList = new List<string>();
|
||||
foreach (string subKeyName in classesRoot.GetSubKeyNames())
|
||||
{
|
||||
if (subKeyName.StartsWith("."))
|
||||
stringList.Add(subKeyName);
|
||||
}
|
||||
return stringList.ToArray();
|
||||
}
|
||||
|
||||
public string ContentType
|
||||
{
|
||||
get => this.GetContentType(this);
|
||||
set => this.SetContentType(this, value);
|
||||
}
|
||||
|
||||
public bool Exists
|
||||
{
|
||||
get
|
||||
{
|
||||
RegistryKey classesRoot = Microsoft.Win32.Registry.ClassesRoot;
|
||||
try
|
||||
{
|
||||
if (classesRoot.OpenSubKey(this.extension) == null)
|
||||
return false;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.ToString());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public string Extension
|
||||
{
|
||||
get => this.extension;
|
||||
set => this.extension = value;
|
||||
}
|
||||
|
||||
public string[] OpenWithList
|
||||
{
|
||||
get => this.GetOpenWithList(this);
|
||||
set => this.SetOpenWithList(this, value);
|
||||
}
|
||||
|
||||
public PerceivedTypes PerceivedType
|
||||
{
|
||||
get => this.GetPerceivedType(this);
|
||||
set => this.SetPerceivedType(this, value);
|
||||
}
|
||||
|
||||
public Guid PersistentHandler
|
||||
{
|
||||
get => this.GetPersistentHandler(this);
|
||||
set => this.SetPersistentHandler(this, value);
|
||||
}
|
||||
|
||||
[XmlAttribute]
|
||||
public string ProgID
|
||||
{
|
||||
get => this.GetProgID(this);
|
||||
set => this.SetProgID(this, value);
|
||||
}
|
||||
|
||||
public void Create() => this.Create(this);
|
||||
|
||||
public void Delete() => this.Delete(this);
|
||||
|
||||
public bool IsValid(string extension, string progId)
|
||||
{
|
||||
FileAssociationInfo fileAssociationInfo = new FileAssociationInfo(extension);
|
||||
return fileAssociationInfo.Exists && !(progId != fileAssociationInfo.ProgID);
|
||||
}
|
||||
|
||||
public FileAssociationInfo(string extension) => this.extension = extension;
|
||||
|
||||
public FileAssociationInfo Create(string progId) => this.Create(progId, PerceivedTypes.None, string.Empty, (string[]) null);
|
||||
|
||||
public FileAssociationInfo Create(
|
||||
string progId,
|
||||
PerceivedTypes perceivedType)
|
||||
{
|
||||
return this.Create(progId, perceivedType, string.Empty, (string[]) null);
|
||||
}
|
||||
|
||||
public FileAssociationInfo Create(
|
||||
string progId,
|
||||
PerceivedTypes perceivedType,
|
||||
string contentType)
|
||||
{
|
||||
return this.Create(progId, PerceivedTypes.None, contentType, (string[]) null);
|
||||
}
|
||||
|
||||
public FileAssociationInfo Create(
|
||||
string progId,
|
||||
PerceivedTypes perceivedType,
|
||||
string contentType,
|
||||
string[] openwithList)
|
||||
{
|
||||
FileAssociationInfo fileAssociationInfo = new FileAssociationInfo(this.extension);
|
||||
if (fileAssociationInfo.Exists)
|
||||
fileAssociationInfo.Delete();
|
||||
fileAssociationInfo.Create();
|
||||
fileAssociationInfo.ProgID = progId;
|
||||
if (perceivedType != PerceivedTypes.None)
|
||||
fileAssociationInfo.PerceivedType = perceivedType;
|
||||
if (contentType != string.Empty)
|
||||
fileAssociationInfo.ContentType = contentType;
|
||||
if (openwithList != null)
|
||||
fileAssociationInfo.OpenWithList = openwithList;
|
||||
return fileAssociationInfo;
|
||||
}
|
||||
|
||||
protected string[] GetOpenWithList(FileAssociationInfo file)
|
||||
{
|
||||
if (!file.Exists)
|
||||
throw new Exception("Extension does not exist");
|
||||
RegistryKey registryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(file.extension).OpenSubKey("OpenWithList");
|
||||
return registryKey == null ? new string[0] : registryKey.GetSubKeyNames();
|
||||
}
|
||||
|
||||
protected void SetOpenWithList(FileAssociationInfo file, string[] programList)
|
||||
{
|
||||
if (!file.Exists)
|
||||
throw new Exception("Extension does not exist");
|
||||
RegistryKey registryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(file.extension, true);
|
||||
if (registryKey.OpenSubKey("OpenWithList", true) != null)
|
||||
registryKey.DeleteSubKeyTree("OpenWithList");
|
||||
RegistryKey subKey = registryKey.CreateSubKey("OpenWithList");
|
||||
foreach (string program in programList)
|
||||
subKey.CreateSubKey(program);
|
||||
ShellNotification.NotifyOfChange();
|
||||
}
|
||||
|
||||
protected PerceivedTypes GetPerceivedType(FileAssociationInfo file)
|
||||
{
|
||||
if (!file.Exists)
|
||||
throw new Exception("Extension does not exist");
|
||||
object obj = this.registryWrapper.Read(file.extension, "PerceivedType");
|
||||
PerceivedTypes perceivedTypes = PerceivedTypes.None;
|
||||
if (obj == null)
|
||||
return perceivedTypes;
|
||||
try
|
||||
{
|
||||
perceivedTypes = (PerceivedTypes) Enum.Parse(typeof (PerceivedTypes), obj.ToString(), true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.ToString());
|
||||
}
|
||||
return perceivedTypes;
|
||||
}
|
||||
|
||||
protected void SetPerceivedType(FileAssociationInfo file, PerceivedTypes type)
|
||||
{
|
||||
if (!file.Exists)
|
||||
throw new Exception("Extension does not exist");
|
||||
this.registryWrapper.Write(file.extension, "PerceivedType", (object) type.ToString());
|
||||
ShellNotification.NotifyOfChange();
|
||||
}
|
||||
|
||||
protected Guid GetPersistentHandler(FileAssociationInfo file)
|
||||
{
|
||||
if (!file.Exists)
|
||||
throw new Exception("Extension does not exist");
|
||||
object obj = this.registryWrapper.Read(file.extension + "\\PersistentHandler", string.Empty);
|
||||
return obj == null ? new Guid() : new Guid(obj.ToString());
|
||||
}
|
||||
|
||||
protected void SetPersistentHandler(FileAssociationInfo file, Guid persistentHandler)
|
||||
{
|
||||
if (!file.Exists)
|
||||
throw new Exception("Extension does not exist");
|
||||
if (persistentHandler == Guid.Empty)
|
||||
return;
|
||||
this.registryWrapper.Write(file.extension + "\\" + (object) this.PersistentHandler, string.Empty, (object) persistentHandler);
|
||||
ShellNotification.NotifyOfChange();
|
||||
}
|
||||
|
||||
protected string GetContentType(FileAssociationInfo file)
|
||||
{
|
||||
if (!file.Exists)
|
||||
throw new Exception("Extension does not exist");
|
||||
object obj = this.registryWrapper.Read(file.extension, "Content Type");
|
||||
return obj == null ? string.Empty : obj.ToString();
|
||||
}
|
||||
|
||||
protected void SetContentType(FileAssociationInfo file, string type)
|
||||
{
|
||||
if (!file.Exists)
|
||||
throw new Exception("Extension does not exist");
|
||||
this.registryWrapper.Write(file.extension, "Content Type", (object) type);
|
||||
ShellNotification.NotifyOfChange();
|
||||
}
|
||||
|
||||
protected string GetProgID(FileAssociationInfo file)
|
||||
{
|
||||
if (!file.Exists)
|
||||
throw new Exception("Extension does not exist");
|
||||
object obj = this.registryWrapper.Read(file.extension, string.Empty);
|
||||
return obj == null ? string.Empty : obj.ToString();
|
||||
}
|
||||
|
||||
protected void SetProgID(FileAssociationInfo file, string progId)
|
||||
{
|
||||
if (!file.Exists)
|
||||
throw new Exception("Extension does not exist");
|
||||
this.registryWrapper.Write(file.extension, string.Empty, (object) progId);
|
||||
ShellNotification.NotifyOfChange();
|
||||
}
|
||||
|
||||
protected void Create(FileAssociationInfo file)
|
||||
{
|
||||
if (file.Exists)
|
||||
file.Delete();
|
||||
Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(file.extension);
|
||||
}
|
||||
|
||||
protected void Delete(FileAssociationInfo file)
|
||||
{
|
||||
if (!file.Exists)
|
||||
throw new Exception("Key not found.");
|
||||
Microsoft.Win32.Registry.ClassesRoot.DeleteSubKeyTree(file.extension);
|
||||
ShellNotification.NotifyOfChange();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue