コード例 #1
0
        /*
         *
         * AssocStr str
         *  File name extension
         *  A file name extension, such as .txt.
         *
         *  CLSID
         *  A CLSID GUID in the standard "{GUID}" format.
         *
         *  ProgID
         *  An application's ProgID, such as Word.Document.8.
         *
         *  Executable name
         *  The name of an application's .exe file. The ASSOCF_OPEN_BYEXENAME flag must be set in flags.
         */
        private static string GetAssociation(AssocF assocF, AssocStr assocStr, string doctype, string pszExtra = null)
        {
            try
            {
                uint pcchOut = 0; // size of output buffer

                // First call is to get the required size of output buffer
                AssocQueryString(assocF, assocStr, doctype, pszExtra, null, ref pcchOut);
                if (pcchOut == 0)
                {
                    return(String.Empty);
                }

                var pszOut = new StringBuilder((int)pcchOut);                               // Allocate the output buffer
                AssocQueryString(assocF, assocStr, doctype, pszExtra, pszOut, ref pcchOut); // Get the full pathname to the program in pszOut

                string doc = pszOut.ToString();
                return(doc);
            }
            catch (Exception exception)
            {
                Logger.Warn(exception);
                return(null);
            }
        }
コード例 #2
0
        static string AssocQueryString(AssocStr association, string extension)
        {
            const int S_OK    = 0;
            const int S_FALSE = 1;

            uint length = 0;
            uint ret    = AssocQueryString(AssocF.None, association, extension, null, null, ref length);

            if (ret != S_FALSE)
            {
                //throw new InvalidOperationException("Could not determine associated string");
                return(null);
            }

            var sb = new StringBuilder((int)length); // (length-1) will probably work too as the marshaller adds null termination

            ret = AssocQueryString(AssocF.None, association, extension, null, sb, ref length);
            if (ret != S_OK)
            {
                //throw new InvalidOperationException("Could not determine associated string");
                return(null);
            }

            return(sb.ToString());
        }
コード例 #3
0
 static extern uint AssocQueryString(
     AssocF flags, 
     AssocStr str, 
     string pszAssoc, 
     string pszExtra, 
     [Out] StringBuilder pszOut, 
     [In][Out] ref uint pcchOut);
コード例 #4
0
        public bool?IsAssociated()
        {
            try
            {
                const string extension = ".feature";

                uint           resultLength = 0;
                const AssocStr assocStr     = AssocStr.FriendlyDocName;
                AssocQueryString(AssocF.NoTruncate, assocStr, extension, null, null, ref resultLength);

                if (resultLength == 0)
                {
                    return(false);
                }

                // Allocate the output buffer
                StringBuilder pszOut = new StringBuilder((int)resultLength);

                // Get the full pathname to the program in pszOut
                AssocQueryString(AssocF.Verify, assocStr, extension, null, pszOut, ref resultLength);

                string doc = pszOut.ToString();

                return(doc.IndexOf("SpecFlow", StringComparison.InvariantCultureIgnoreCase) >= 0);
            }
            catch (Exception ex)
            {
                tracer.Trace("IsAssociated falied: {0}", this, ex);
                return(null);
            }
        }
コード例 #5
0
        /// <summary>
        /// Retrieves a file association for a particular extension
        /// From Ohad Schneider <see cref="!:https://stackoverflow.com/a/17773402"/>
        /// </summary>
        /// <param name="associationFlags">Any flags which need to be set in order to retrieve the association</param>
        /// <param name="associationType">The type of association which should be retrieved</param>
        /// <param name="fileExtension">The file association which we will use to determine the association</param>
        /// <returns></returns>
        private static string GetFileAssociation(AssocF associationFlags, AssocStr associationType, string fileExtension)
        {
            uint bufferSize     = 0;
            uint returnedStatus = FileInvoker.AssocQueryString(associationFlags, associationType, fileExtension, null,
                                                               null, ref bufferSize);

            const int successWithLength = 1;

            if (returnedStatus != successWithLength)
            {
                throw new NoAssociationFoundException(
                          $"Could not determine the required buffer size required for the file association {associationType} and file extension {fileExtension}",
                          fileExtension);
            }

            StringBuilder stringBuilder = new StringBuilder((int)bufferSize);

            returnedStatus = FileInvoker.AssocQueryString(associationFlags, associationType, fileExtension, null,
                                                          stringBuilder, ref bufferSize);

            const int successWithAssociation = 0;

            if (returnedStatus != successWithAssociation)
            {
                throw new NoAssociationFoundException(
                          $"Could not determine a string for the file association {associationType} and file extension {fileExtension}",
                          fileExtension);
            }

            return(stringBuilder.ToString());
        }
コード例 #6
0
ファイル: NativeMethods.cs プロジェクト: MBulli/Glimpse
 internal static extern uint AssocQueryString(
     AssocF flags,
     AssocStr str,
     string pszAssoc,
     string pszExtra,
     [Out] StringBuilder pszOut,
     [In][Out] ref uint pcchOut);
コード例 #7
0
 private static extern HRESULT AssocQueryString(
     AssocF flags,
     AssocStr str,
     string pszAssoc,
     string pszExtra,
     [Out] StringBuilder pszOut,
     ref uint pcchOut);
コード例 #8
0
 public static extern uint AssocQueryString(
     AssocF flags,
     AssocStr str,
     [MarshalAs(UnmanagedType.LPWStr)] string pszAssoc,
     [MarshalAs(UnmanagedType.LPWStr)] string pszExtra,
     [MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszOut,
     ref uint pcchOut
     );
コード例 #9
0
ファイル: MyPDF.cs プロジェクト: chenliang123/liaoNingYiDong
        public static string FileExtentionInfo(AssocStr assocStr, string doctype)
        {
            uint pcchOut = 0;
            AssocQueryString(AssocF.Verify, assocStr, doctype, null, null, ref pcchOut);

            StringBuilder pszOut = new StringBuilder((int)pcchOut);
            AssocQueryString(AssocF.Verify, assocStr, doctype, null, pszOut, ref pcchOut);
            return pszOut.ToString();
        }
コード例 #10
0
        public static string FileExtentionInfo(AssocStr assocStr, string doctype)
        {
            uint pcchOut = 0;
            AssocQueryString(AssocF.Verify, assocStr, doctype, null, null, ref pcchOut);

            StringBuilder pszOut = new StringBuilder((int)pcchOut);
            AssocQueryString(AssocF.Verify, assocStr, doctype, null, pszOut, ref pcchOut);
            return pszOut.ToString();
        }
コード例 #11
0
        public static string GetExtentionInfo(AssocStr assocStr, string extension)
        {
            uint pcchOut = 0;

            AssocQueryString(AssocF.Verify, assocStr, extension, null, null, ref pcchOut);
            StringBuilder pszOut = new StringBuilder((int)pcchOut);

            AssocQueryString(AssocF.Verify, assocStr, extension, null, pszOut, ref pcchOut);
            return(pszOut.ToString());
        }
コード例 #12
0
        private static string FileExtentionInfo(AssocStr assocStr, string extensionWithDot)
        {
#pragma warning disable CA1806 // Do not ignore method results
            uint pcchOut = 0;
            AssocQueryString(AssocF.Verify, assocStr, extensionWithDot, null, null, ref pcchOut);
            StringBuilder pszOut = new((int)pcchOut);
            AssocQueryString(AssocF.Verify, assocStr, extensionWithDot, null, pszOut, ref pcchOut);
#pragma warning restore CA1806 // Do not ignore method results
            return(pszOut.ToString());
        }
コード例 #13
0
ファイル: FileUtils.cs プロジェクト: killbug2004/WSProf
        public static string FileExtentionInfo(AssocStr assocStr, string doctype)
        {
            if ((doctype.Length <= 1) || !doctype.StartsWith(".")) return "";

            uint pcchOut = 0;
            AssocQueryString(AssocF.Verify, assocStr, doctype, null, null, ref pcchOut);

            if (pcchOut == 0) return (doctype.Trim('.').ToUpper() + " File");

            StringBuilder pszOut = new StringBuilder((int)pcchOut);
            AssocQueryString(AssocF.Verify, assocStr, doctype, null, pszOut, ref pcchOut);
            return pszOut.ToString();
        }
コード例 #14
0
ファイル: Win32.cs プロジェクト: tzinmein/Camelot
    public static string AssocQueryString(AssocF assocF, AssocStr association, string assocString)
    {
        var length      = 0u;
        var queryResult = AssocQueryString(assocF, association, assocString, null, null, ref length);

        if (queryResult != 1)
        {
            return(null);
        }

        var builder = new StringBuilder((int)length);

        queryResult = AssocQueryString(assocF, association, assocString, null, builder, ref length);

        return(queryResult == 0 ? builder.ToString() : null);
    }
コード例 #15
0
        private static string FileExtentionInfo(AssocStr assocStr, string doctype, string verb)
        {
            uint pcchOut = 0;

            AssocQueryString(AssocF.Verify, assocStr, doctype, verb, null, ref pcchOut);

            //Debug.Assert(pcchOut != 0);
            if (pcchOut == 0)
            {
                return("");
            }

            StringBuilder pszOut = new StringBuilder((int)pcchOut);

            AssocQueryString(AssocF.Verify, assocStr, doctype, verb, pszOut, ref pcchOut);
            return(pszOut.ToString());
        }
コード例 #16
0
ファイル: ShellHelper.cs プロジェクト: BeePerNet/SizeOnDisk
        private static string FileExtentionInfo(AssocStr assocStr, string doctype)
        {
            IntPtr pcchOut = IntPtr.Zero;

            if (SafeNativeMethods.AssocQueryString(AssocF.Verify, assocStr, doctype, null, null, ref pcchOut) != 1)
            {
                return(null);
            }

            StringBuilder pszOut = new StringBuilder((int)pcchOut);

            if (SafeNativeMethods.AssocQueryString(AssocF.Verify, assocStr, doctype, null, pszOut, ref pcchOut) != 0)
            {
                return(null);
            }

            return(pszOut.ToString());
        }
コード例 #17
0
        internal static string AssocQueryString(AssocStr association, string extension)
        {
            uint length = 0;
            uint ret    = AssocQueryString(AssocF.None, association, extension, null, null, ref length);

            if (ret != 1) // expected S_FALSE
            {
                throw new InvalidOperationException("Could not determine associated string, unable to get the required buffer length. Error code: " + ret);
            }

            var sb = new StringBuilder((int)length); // (length-1) will probably work too as null termination is added

            ret = AssocQueryString(AssocF.None, association, extension, null, sb, ref length);
            if (ret != 0) // expected S_OK
            {
                throw new InvalidOperationException("Could not determine associated string. Error code: " + ret);
            }

            return(sb.ToString());
        }
コード例 #18
0
ファイル: Win32Api.cs プロジェクト: MarcoMedrano/WinR
        internal static string AssocQueryString(AssocF assocF, AssocStr association, string assocString)
        {
            uint length = 0;
            uint ret = AssocQueryString(assocF, association, assocString, null, null, ref length);
            if (ret != 1) //expected S_FALSE
            {
                return null;
                //throw new InvalidOperationException("Could not determine associated string");
            }

            var sb = new StringBuilder((int) length); //(length-1) will probably work too as null termination is added
            ret = AssocQueryString(assocF, association, assocString, null, sb, ref length);
            if (ret != 0) //expected S_OK
            {
                return null;
                //throw new InvalidOperationException("Could not determine associated string");
            }

            return sb.ToString();
        }
コード例 #19
0
        private string AssocQueryString(AssocStr association, string extension, string verb)
        {
            uint length = 0;
            var  ret    = AssocQueryString(AssocF.None, association, extension, verb, null, ref length);

            if (ret != HRESULT.S_FALSE) //expected S_FALSE to indicate the required amount of memory (ref length)
            {
                return("");
            }

            var sb = new StringBuilder((int)length);

            ret = AssocQueryString(AssocF.None, association, extension, verb, sb, ref length);
            if (ret != HRESULT.S_OK) //expected S_OK
            {
                throw new Win32Exception((int)ret);
            }

            return(sb.ToString());
        }
コード例 #20
0
        private string AssocQueryString(AssocStr association, string extension)
        {
            uint length = 0;
            uint ret    = AssocQueryString(
                AssocF.None, association, extension, "printto", null, ref length);

            if (ret != 1) //expected S_FALSE
            {
                throw new Win32Exception();
            }

            var sb = new StringBuilder((int)length);

            ret = AssocQueryString(
                AssocF.None, association, extension, null, sb, ref length);
            if (ret != 0) //expected S_OK
            {
                throw new Win32Exception();
            }

            return(sb.ToString());
        }
コード例 #21
0
        static string assocQueryString(AssocStr assocStr, string extension)
        {
            const int S_OK = 0, S_FALSE = 1;

            uint length = 0;
            uint ret    = AssocQueryString(AssocFlags.None, assocStr, extension, null, null, ref length);

            if (ret != S_FALSE)
            {
                return(null);
            }

            StringBuilder sb = new ((int)length);

            ret = AssocQueryString(AssocFlags.None, assocStr, extension, null, sb, ref length);
            if (ret != S_OK)
            {
                return(null);
            }

            return(sb.ToString());
        }
コード例 #22
0
        public static string AssocQueryString(AssocStr association, string extension)
        {
            const int sOk    = 0;
            const int sFalse = 1;

            uint length = 0;
            var  result = AssocQueryString(AssocF.None, association, extension, null, null, ref length);

            if (result != sFalse)
            {
                return(null);
            }

            var stringBuilder = new StringBuilder((int)length);

            result = AssocQueryString(AssocF.None, association, extension, null, stringBuilder, ref length);
            if (result != sOk)
            {
                return(null);
            }

            return(stringBuilder.ToString());
        }
コード例 #23
0
    private string AssocQueryString(AssocStr association, string extension)
    {
        const int S_OK    = 0;
        const int S_FALSE = 1;

        uint length = 0;
        uint ret    = AssocQueryString(AssocF.None, association, extension, null, null, ref length);

        if (ret != S_FALSE)
        {
            throw new InvalidOperationException("Could not determine associated string");
        }

        var sb = new StringBuilder((int)length);

        ret = AssocQueryString(AssocF.None, association, extension, null, sb, ref length);
        if (ret != S_OK)
        {
            throw new InvalidOperationException("Could not determine associated string");
        }

        return(sb.ToString());
    }
コード例 #24
0
 public static string FileExtentionInfo(AssocStr assocStr, string Extension)
 {
     Extension = "." + Extension.Trim('.').ToLowerInvariant();
     uint pcchOut = 0;
     AssocQueryString(AssocF.Verify, assocStr, Extension, null, null, ref pcchOut);
     StringBuilder pszOut = new StringBuilder((int)pcchOut);
     AssocQueryString(AssocF.Verify, assocStr, Extension, null, pszOut, ref pcchOut);
     return pszOut.ToString();
 }
コード例 #25
0
 private static extern uint AssocQueryString(AssocF flags, AssocStr str, string extension, string pszExtra, [Out] StringBuilder pszOut, ref uint pcchOut);
コード例 #26
0
 public static string GetAssoc(string pszAssoc  , AssocF flags, AssocStr str)
 {
     uint pcchOut = 0;
     AssocQueryString(flags, str, pszAssoc, null, null, ref pcchOut);
     StringBuilder pszOut = new StringBuilder((int)pcchOut);
     AssocQueryString(flags, str, pszAssoc, null, pszOut, ref pcchOut);
     return pszOut.ToString();
 }
コード例 #27
0
        private static string GetAssocApplicationNative(string fileExtensionIncludingDot, AssocStr str)
        {
            uint cOut = 0;

            if (AssocQueryString(AssocF.Verify | AssocF.RemapRunDll | AssocF.InitIgnoreUnknown, str,
                                 fileExtensionIncludingDot, null, null,
                                 ref cOut) != 1)
            {
                return(null);
            }

            var pOut = new StringBuilder((int)cOut);

            if (AssocQueryString(AssocF.Verify | AssocF.RemapRunDll | AssocF.InitIgnoreUnknown, str,
                                 fileExtensionIncludingDot, null, pOut,
                                 ref cOut) != 0)
            {
                return(null);
            }

            return(pOut.ToString());
        }
コード例 #28
0
 private static extern uint AssocQueryString(AssocF flags, AssocStr str, string pszAssoc, string pszExtra,
                                             [Out] StringBuilder sOut, [In][Out] ref uint nOut);
コード例 #29
0
ファイル: Win32.cs プロジェクト: smedrano/google-drive-proxy
            public static string GetAssociation(AssocF assocF, AssocStr assocStr, string doctype)
            {
                try
                {
                  uint pcchOut = 0; // size of output buffer

                  // First call is to get the required size of output buffer
                  AssocQueryString(assocF, assocStr, doctype, null, null, ref pcchOut);

                  if (pcchOut == 0)
                  {
                return String.Empty;
                  }

                  // Allocate the output buffer
                  var pszOut = new StringBuilder((int)pcchOut);

                  // Get the full pathname to the program in pszOut
                  AssocQueryString(assocF, assocStr, doctype, null, pszOut, ref pcchOut);

                  string doc = pszOut.ToString();
                  return doc;
                }
                catch (Exception exception)
                {
                  Log.Error(exception);

                  return null;
                }
            }
コード例 #30
0
ファイル: Win32Api.cs プロジェクト: MarcoMedrano/WinR
 internal static string AssocQueryString(AssocStr association, string extension)
 {
     return AssocQueryString(AssocF.None, association, extension);
 }
コード例 #31
0
ファイル: Native.cs プロジェクト: vasiliyph/bytecode-api
 public static extern uint AssocQueryString(int flags, AssocStr str, string assoc, string extra, [Out] StringBuilder result, [In][Out] ref uint resultLength);