דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איך להשיג את האייקון של כל סוגי הקבצים בC#

איך להשיג את האייקון של כל סוגי הקבצים בC#

מתוזמן נעוץ נעול הועבר תכנות
8 פוסטים 5 כותבים 249 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • pcinfogmachP מנותק
    pcinfogmachP מנותק
    pcinfogmach
    כתב ב נערך לאחרונה על ידי pcinfogmach
    #1

    מישהו יודע איך אפשר איך את האייקון של כל הקבצים בC#
    כלומר אם למשל יש לי פרוייקט כמו everything שמציג ברשימה כמה סוגי קבצים ואני רוצה להציג את האייקון שלהם איך אני עושה את זה.
    מצו"ב תמונה של התוכנה הנ"ל לשם בהירות
    35ca5257-7aec-47ae-9953-4f2d796d3838-image.png

    גמ"ח מידע מחשבים ואופיס

    א תגובה 1 תגובה אחרונה
    0
    • א מנותק
      א מנותק
      ארי
      השיב לpcinfogmach ב נערך לאחרונה על ידי
      #2

      @pcinfogmach הייתי ממליץ לך למחוק את התמונה, יש שם יותר מדי פרטים שלך...

      pcinfogmachP תגובה 1 תגובה אחרונה
      4
      • M מנותק
        M מנותק
        Mordechai 0
        כתב ב נערך לאחרונה על ידי
        #3

        רק זורק את זה פה...
        האייקונים של הקבצים זה האייקון של התוכנה שתומכת בהם למשל .html יציג אייקון של דפדפן וכו'

        תגובה 1 תגובה אחרונה
        0
        • pcinfogmachP מנותק
          pcinfogmachP מנותק
          pcinfogmach
          השיב לארי ב נערך לאחרונה על ידי
          #4

          @ארי
          שיניתי תודה

          גמ"ח מידע מחשבים ואופיס

          תגובה 1 תגובה אחרונה
          2
          • clickoneC מנותק
            clickoneC מנותק
            clickone
            כתב ב נערך לאחרונה על ידי clickone
            #5
            string filename = @"path-to-file";
            Icon icon = System.Drawing.Icon.ExtractAssociatedIcon(filename);
            

            לקבל את התמונה אפשר אח"כ

            var image=icon.ToBitmap();
            

            אין טסט כמו פרודקשן.

            המייל שלי urivpn@gmail.com

            pcinfogmachP תגובה 1 תגובה אחרונה
            6
            • pcinfogmachP מנותק
              pcinfogmachP מנותק
              pcinfogmach
              השיב לclickone ב נערך לאחרונה על ידי
              #6

              @clickone
              תודה רבה זה מקדם אותי המון
              האם יש לך מושג איך מקבלים אייקונים של תיקיות וכננים או שאת זה אצטרך לעשות באופן ידני?

              גמ"ח מידע מחשבים ואופיס

              תגובה 1 תגובה אחרונה
              0
              • clickoneC מנותק
                clickoneC מנותק
                clickone
                כתב ב נערך לאחרונה על ידי
                #7

                הנה דוגמא יחסית מלאה למה שאתה כנראה מנסה לעשות
                https://learn.microsoft.com/en-us/dotnet/desktop/winforms/advanced/how-to-extract-the-icon-associated-with-a-file-in-windows-forms?view=netframeworkdesktop-4.8

                לגבי תיקיות וכוננים נראה שאין מנוס מלהשתמש בפונקציות API של הווינדוס (נפק"מ אם אתה מפתח בדוטנט core ורוצה חוצה פלטפורמות)
                ע"ע
                https://stackoverflow.com/questions/26205607/getting-folder-icon-path

                אין טסט כמו פרודקשן.

                המייל שלי urivpn@gmail.com

                תגובה 1 תגובה אחרונה
                3
                • קומפיונטק מנותק
                  קומפיונטק מנותק
                  קומפיונט
                  כתב ב נערך לאחרונה על ידי קומפיונט
                  #8

                  בדיוק לפני כמה זמן הייתי צריך לכתוב קוד שמחלץ תמונה ממוזערת מקובץ וידיאו, אז כתבתי את זה (וזה מתאים לכל סוגי הקבצים, גם לכוננים), היתרון שאפשר לקבל את התמונה בגודל שתרצה ועם עוד enum של אפשרויות.

                  זה הקוד:

                  public static class Shell
                  {
                      private static readonly Guid _s_imageFactoryShellId = new("BCC18B79-BA16-442F-80C4-8A59C30C463B");
                  
                      public static byte[] GetImage(string path, ImageSize size, ShellItemGetImageOptions options)
                      {
                          if (OperatingSystem.IsWindows())
                          {
                              if (SHCreateItemFromParsingName(path, 0, _s_imageFactoryShellId, out var imageFactory) != 0)
                              {
                                  throw new Win32Exception(Marshal.GetLastWin32Error());
                              }
                  
                              if (imageFactory.GetImage(size, (int)options, out var hBitmap) != 0)
                              {
                                  throw new Win32Exception(Marshal.GetLastWin32Error());
                              }
                  
                              try
                              {
                                  using var stream = new MemoryStream();
                  
                                  var bitmap = Image.FromHbitmap(hBitmap);
                  
                                  bitmap.Save(stream, ImageFormat.Jpeg);
                  
                                  return stream.ToArray();
                              }
                              finally
                              {
                                  DeleteObject(hBitmap);
                              }
                          }
                  
                          throw new PlatformNotSupportedException();
                      }
                  }
                  
                  public enum ShellItemGetImageOptions
                  {
                      ResizeToFit = 0,
                      BiggerSizeOk = 1,
                      MemoryOnly = 2,
                      IconOnly = 4,
                      ThumbnailOnly = 8,
                      InCacheOnly = 0x10,
                      CropToSquare = 0x20,
                      WideThumbnails = 0x40,
                      IconBackground = 0x80,
                      ScaleUp = 0x100
                  }
                  
                  public readonly struct ImageSize(int width, int height)
                  {
                      public int Width { get; } = width;
                  
                      public int Height { get; } = height;
                  }
                  
                  internal static partial class Unmanaged
                  {
                      [GeneratedComInterface]
                      [Guid("BCC18B79-BA16-442F-80C4-8A59C30C463B")]
                      [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
                      public partial interface IShellItemImageFactory
                      {
                          [PreserveSig]
                          int GetImage(ImageSize size, int flags, out nint hBitmap);
                      }
                  
                      [LibraryImport("Shell32", SetLastError = true, StringMarshalling = StringMarshalling.Utf16)]
                      public static partial int SHCreateItemFromParsingName(string pszPath, nint pbc, Guid riid, out IShellItemImageFactory ppv);
                  
                      [LibraryImport("Gdi32", SetLastError = true)]
                      public static partial int DeleteObject(nint hObject);
                  }
                  

                  נ.ב.
                  זה הקוד הבסיסי, אפשר לשנות ולהתאים אותו למה שאתה צריך.
                  לא בדקתי אם זה עובד גם על מערכות windows יותר ישנות.
                  הקוד תואם ל NativeAOT (אם תשתמש בו בעתיד)
                  לא יודע אם הקוד הזה יעבוד ב net-framework.

                  תגובה 1 תגובה אחרונה
                  4

                  בא תתחבר לדף היומי!
                  • התחברות

                  • אין לך חשבון עדיין? הרשמה

                  • התחברו או הירשמו כדי לחפש.
                  • פוסט ראשון
                    פוסט אחרון
                  0
                  • דף הבית
                  • קטגוריות
                  • פוסטים אחרונים
                  • משתמשים
                  • חיפוש
                  • חוקי הפורום