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

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

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

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

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

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

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

    א תגובה 1 תגובה אחרונה
    0
    • pcinfogmachP pcinfogmach

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

      א מנותק
      א מנותק
      ארי
      כתב ב נערך לאחרונה על ידי
      #2

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

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

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

        תגובה 1 תגובה אחרונה
        0
        • א ארי

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

          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
            • clickoneC clickone
              string filename = @"path-to-file";
              Icon icon = System.Drawing.Icon.ExtractAssociatedIcon(filename);
              

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

              var image=icon.ToBitmap();
              
              pcinfogmachP מנותק
              pcinfogmachP מנותק
              pcinfogmach
              כתב ב נערך לאחרונה על ידי
              #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
                  • דף הבית
                  • קטגוריות
                  • פוסטים אחרונים
                  • משתמשים
                  • חיפוש
                  • חוקי הפורום