public void Add(string extention)
        {
            List <string> progIds = ProtocolAssociationsRegistry.GetProgIdExtentionAssociations(extention);

            foreach (string progId in progIds)
            {
                var verbs = ProtocolAssociationsRegistry.GetVerbsByProgId(progId);

                if (verbs != null && verbs.Length > 0)
                {
                    ApplicationData applicationData = new ApplicationData();
                    applicationData.ProgId = progId;

                    AssocQuery assocQuery = new AssocQuery(progId);
                    applicationData.ApplicationId    = assocQuery.AppId;
                    applicationData.Command          = assocQuery.Command;
                    applicationData.FriendlyAppName  = assocQuery.FriendlyAppName;
                    applicationData.AppIconReference = assocQuery.AppIconReference;
                    AddApplicationData(extention, applicationData);

                    foreach (string verb in verbs)
                    {
                        string command = "";
                        if (!string.IsNullOrEmpty(applicationData.Command))
                        {
                            command = AssocQuery.GetCommandProgId(progId, verb);
                        }
                        applicationData.AddVerb(verb, command);
                    }
                    AddApplicationData(extention, applicationData);
                }
            }
        }
        //[DllImport("ole32.dll", CharSet = CharSet.Unicode, PreserveSig = false)]
        //static extern string ProgIDFromCLSID([In()] ref Guid clsid);



        public static SortedList <string, ApplicationData> ListInstalledApps()
        {
            SortedList <string, ApplicationData> applicationDatas = new SortedList <string, ApplicationData>();

            // GUID taken from https://docs.microsoft.com/en-us/windows/win32/shell/knownfolderid
            var         FOLDERID_AppsFolder = new Guid("{1e87508d-89c2-42f0-8a7e-645a0f50ca58}");
            ShellObject appsFolder          = (ShellObject)KnownFolderHelper.FromKnownFolderId(FOLDERID_AppsFolder);

            foreach (var app in (IKnownFolder)appsFolder)
            {
                ApplicationData applicationData = new ApplicationData();
                applicationData.FriendlyAppName = app.Name;                                    // The friendly app name
                applicationData.ApplicationId   = app.Properties.System.AppUserModel.ID.Value; // app.ParsingName;
                applicationData.ProgId          = AssocQuery.GetAppId(app.ParsingName, "open");
                applicationData.Icon            = app.Thumbnail.Icon;                          // You can even get the Jumbo icon in one shot - ImageSource icon = app.Thumbnail.ExtraLargeBitmapSource;


                //var a = AssocQuery.GetAppId(app.ParsingName, "open");
                //var b = AssocQuery.GetCommandProgId(app.ParsingName, "open");
                //var c = AssocQuery.GetCommandExe(app.ParsingName, "open");

                //ProgIDFromCLSID:
                //Guid g = new Guid("88D969C0-F192-11D4-A65F-0040963251E5"); // MSXML 4.0 DOM.
                //string progId = ProgIDFromCLSID(ref g);

                //Debug.Assert(progId == "Msxml2.DOMDocument.4.0");


                //Microsoft.SkyDrive.Desktop
                AssocQuery assocQuery = new AssocQuery(applicationData.ApplicationId);
                var        verbs      = ProtocolAssociationsRegistry.GetVerbsByProgId(app.Name);

                foreach (string verb in verbs)
                {
                    string command = "";
                    //if (!string.IsNullOrEmpty(applicationData.Command)) { command = AssocQuery.GetCommandProgId(progId, verb); }
                    applicationData.AddVerb(verb, command);
                }

                if (!applicationDatas.Keys.Contains(applicationData.FriendlyAppName))
                {
                    applicationDatas.Add(applicationData.FriendlyAppName, applicationData);
                }
            }

            return(applicationDatas);
        }
 public static string GetCommandExe(string exeName, string verb)
 {
     return(AssocQuery.GetAssociation(AssocF.ASSOCF_OPEN_BYEXENAME, AssocStr.ASSOCSTR_COMMAND, exeName, verb));
 }
 public static string GetCommandProgId(string progId, string verb)
 {
     return(AssocQuery.GetAssociation(AssocF.ASSOCF_NONE, AssocStr.ASSOCSTR_COMMAND, progId, verb));
 }
 public static string GetAppId(string filenameExt, string verb)
 {
     return(AssocQuery.GetAssociation(AssocF.ASSOCF_NONE, AssocStr.ASSOCSTR_APPID, filenameExt, verb));
 }