예제 #1
0
파일: Shell32.cs 프로젝트: Kuzq/gitter
 public static extern IntPtr SHGetFileInfo(
     string pszPath,
     int dwFileAttributes,
     ref SHFILEINFO psfi,
     int cbFileInfo,
     int uFlags
     );
예제 #2
0
파일: ShellUtility.cs 프로젝트: Kuzq/gitter
        public static Icon ExtractAssociatedFileIcon16(string fileName)
        {
            const int SHGFI_ICON = 0x100;
            const int SHGFI_SMALLICON = 0x1;
            const int SHGFI_USEFILEATTRIBUTES = 0x10;

            const int FILE_ATTRIBUTE_NORMAL = 0x80;

            var info = new SHFILEINFO();
            Shell32.SHGetFileInfo(fileName, FILE_ATTRIBUTE_NORMAL, ref info, Marshal.SizeOf(info), SHGFI_ICON | SHGFI_SMALLICON);
            try
            {
                return Icon.FromHandle(info.hIcon);
            }
            catch
            {
                Shell32.SHGetFileInfo(fileName, FILE_ATTRIBUTE_NORMAL, ref info, Marshal.SizeOf(info), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
                try
                {
                    return Icon.FromHandle(info.hIcon);
                }
                catch
                {
                    return null;
                }
            }
        }
예제 #3
0
파일: Utility.cs 프로젝트: Kuzq/gitter
        public static string GetFileType(string fileName, bool dir, bool useExtensionOnly)
        {
            const int SHGFI_USEFILEATTRIBUTES = 0x10;
            const int SHGFI_TYPENAME = 0x400;

            const int FILE_ATTRIBUTE_NORMAL = 0x80;
            const int FILE_ATTRIBUTE_DIR = 0x10;

            var attr = dir ? FILE_ATTRIBUTE_DIR | FILE_ATTRIBUTE_NORMAL : FILE_ATTRIBUTE_NORMAL;
            var req = useExtensionOnly ? SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME : SHGFI_TYPENAME;

            var info = new SHFILEINFO();
            var ret = Shell32.SHGetFileInfo(fileName, attr, ref info, Marshal.SizeOf(info), req);
            return info.szTypeName;
        }