public CollectProtocolAssocs ( [ commandMapper, [ capabilities ) : void | ||
commandMapper | [ | Provides best-match command-line to |
capabilities | [ | The capability list to add the collected data to. |
return | void |
public void CollectProtocolAssocs([NotNull] CommandMapper commandMapper, [NotNull] CapabilityList capabilities)
{
#region Sanity checks
if (capabilities == null) throw new ArgumentNullException(nameof(capabilities));
if (commandMapper == null) throw new ArgumentNullException(nameof(commandMapper));
#endregion
foreach (string protocol in ProtocolAssocs.Select(protocolAssoc => protocolAssoc.Key))
{
using (var protocolKey = Registry.ClassesRoot.OpenSubKey(protocol))
{
if (protocolKey == null) throw new IOException(protocol + " not found");
capabilities.Entries.Add(new UrlProtocol
{
ID = protocol,
Descriptions = {RegistryUtils.GetString(@"HKEY_CLASSES_ROOT\" + protocol, valueName: null, defaultValue: protocol)},
Verbs = {GetVerb(protocolKey, commandMapper, "open")}
});
}
}
}
}
private static CapabilityList GetCapabilityList(CommandMapper commandMapper, SnapshotDiff diff) { var capabilities = new CapabilityList { OS = OS.Windows }; string appName = null, appDescription = null; diff.CollectFileTypes(commandMapper, capabilities); diff.CollectContextMenus(commandMapper, capabilities); diff.CollectAutoPlays(commandMapper, capabilities); diff.CollectDefaultPrograms(commandMapper, capabilities, ref appName); var appRegistration = diff.GetAppRegistration(commandMapper, capabilities, ref appName, ref appDescription); if (appRegistration != null) { capabilities.Entries.Add(appRegistration); } else { // Only collect URL protocols if there wasn't already an application registration that covered them diff.CollectProtocolAssocs(commandMapper, capabilities); } return(capabilities); }