Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Lấy icon của 1 file dựa trên phần mở rộng trong C#?

  1. #1
    Ngày gia nhập
    11 2011
    Bài viết
    70

    Mặc định Lấy icon của 1 file dựa trên phần mở rộng trong C#?

    Mình đang làm project về explorer nên cần lấy icon của file để thêm vào danh sách file trong listview, cho mình hỏi cách lấy icon của 1 file với phần mở rộng có sẵn trong máy nha

  2. #2
    Ngày gia nhập
    11 2008
    Nơi ở
    An Giang
    Bài viết
    502

    Theo cách của mình thì có thể sử dụng Registry để làm được việc này.
    - Đầu tiên lấy được phần mở rộng của File.
    - Truy cập vào Registry: HKEY_CLASSES_ROOT\"phần mở rộng"+"từ 'file'"\DefaultIcon
    ví dụ: HKEY_CLASSES_ROOT\mp3file\DefaultIcon
    p/s: Trên chỉ là ý tưởng thui. Mình cũng chưa thữ nữa. Hihi... Khi nào rãnh mình tìm hiểu thử

  3. #3
    Ngày gia nhập
    09 2011
    Bài viết
    22

    Giải pháp cho bạn dey!hj
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    namespace GET_ICON_FROM_FILE
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct SHFILEINFO
        {
            public IntPtr hIcon;
            public IntPtr iIcon;
            public uint dwAttributes;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
            public string szDisplayName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
            public string szTypeName;
        };
    
       public class SpyIcon
        {
            public const uint SHGFI_ICON = 0x100;
            public const uint SHGFI_LARGEICON = 0x0;    // 'Large icon
            public const uint SHGFI_SMALLICON = 0x1;    // 'Small icon
    
            [DllImport("shell32.dll")]
            public static extern IntPtr SHGetFileInfo(string pszPath,
                                        uint dwFileAttributes,
                                        ref SHFILEINFO psfi,
                                        uint cbSizeFileInfo,
                                        uint uFlags);
           public static System.Drawing.Icon GetIcon(string path)
            {
                SHFILEINFO sinfo = new SHFILEINFO();
                IntPtr iconHwnd = SHGetFileInfo(path, 0, ref sinfo, (uint)Marshal.SizeOf(sinfo), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_SMALLICON);
                return System.Drawing.Icon.FromHandle(sinfo.hIcon);
            }
        }
    }

  4. #4
    Ngày gia nhập
    11 2011
    Bài viết
    70

    Giải thích giúp mình được không, code mình không hiểu :|

  5. #5
    Ngày gia nhập
    09 2011
    Bài viết
    22

    Trích dẫn Nguyên bản được gửi bởi khanhduy.8hpm Xem bài viết
    Giải thích giúp mình được không, code mình không hiểu :|
    Đoạn mã lệnh trên dùng tới hàm api Win32 để lấy icon của một file
    Bạn chỉ cần gọi :
    Code:
    SpyIcon.GetIcon(@"C:\Program Files\Yahoo!\Messenger\YahooMessenger.exe")
    //Nó sẽ trả lại cho bạn icon của yahoo

  6. #6
    Ngày gia nhập
    11 2011
    Bài viết
    70

    Mặc định Lấy icon của 1 file dựa trên phần mở rộng trong C#?

    api là gì vậy, mình không biết là gì luôn
    [StructLayout(LayoutKind.Sequential)]: nghĩa nó là thế nào?
    public struct SHFILEINFO, public class SpyIcon: ai có thể giải thích cho mình 2 hàm này không, mình bó tay rồi, mình muốn làm khi đã hiểu rõ vấn đề chứ không phải copy và paste

  7. #7
    Ngày gia nhập
    11 2011
    Bài viết
    70

    Ai giải thích giúp mình với, híc híc

  8. #8
    Ngày gia nhập
    04 2012
    Bài viết
    8

    Trích dẫn Nguyên bản được gửi bởi khanhduy.8hpm Xem bài viết
    api là gì vậy, mình không biết là gì luôn
    [StructLayout(LayoutKind.Sequential)]: nghĩa nó là thế nào?
    public struct SHFILEINFO, public class SpyIcon: ai có thể giải thích cho mình 2 hàm này không, mình bó tay rồi, mình muốn làm khi đã hiểu rõ vấn đề chứ không phải copy và paste
    StructLayout(LayoutKind.Sequential) Cái này là Định nghĩa struct SHFILEINFO theo thứ tự thôi bạn .

    SHFILEINFO bạn tìm hiểu về API WIN32 thì sẽ hiều

    public class SpyIcon các này thì chỉ đơn giản tạo cái lớp để bạn lấy cái ICon thui !

  9. #9
    Ngày gia nhập
    11 2011
    Bài viết
    70

    Cám ơn bạn nhiều, mình cần biết thêm là:
    public const uint SHGFI_LARGEICON = 0x0;: ại sao phải khai báo hằng số cho kiểu uint
    Kiểu uint, Intpri trả về gi
    Xin các bạn giúp đở

  10. #10
    Ngày gia nhập
    11 2011
    Bài viết
    70

    Cho mình hỏi thêm, sao dùng hàm này để lấy icon thì mình dung đoạn code dưới đây để save icon lại thì size nó nhỏ xíu
    Visual C# Code:
    1. Bitmap bit = ic.ToBitmap();
    2. bit.Save(@"C:\icon.ico", System.Drawing.Imaging.ImageFormat.Icon);

Các đề tài tương tự

  1. Trả lời: 3
    Bài viết cuối: 10-04-2013, 08:06 AM
  2. Làm sao để tạo icon cho file exe của mình trong resoure icon?
    Gửi bởi luongtankhang123 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 4
    Bài viết cuối: 25-01-2012, 07:54 PM
  3. thay đổi icon trên destop cho file *.exe
    Gửi bởi lequ0ch0anglt trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 02-10-2011, 11:36 AM
  4. Cách lấy Icon của file dựa trên phần mở rộng của file ấy?
    Gửi bởi quangnh89 trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 3
    Bài viết cuối: 09-05-2011, 08:24 PM
  5. Tính số Icon Trong 1 File exe ?
    Gửi bởi honey trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 2
    Bài viết cuối: 20-09-2010, 10:10 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn