Áp dụng icon cho các file có đuôi mở rộng do chương trình tạo ra trong C#

find

Khi mới bắt đầu đi vào lập trình Windows Form với ngôn ngữ C#. Ta không khỏi thắc mắc rằng tại sao những file .doc, .xls, .rar… lại có icon giống với icon của chương trình. Những file có đuôi mở rộng mới do chương trình chúng ta tự tạo ra sẽ mặc định có icon là một trang giấy trắng. Trước đây tôi cũng từng thắc mắc về vấn đề này. Và giờ đây tôi viết bài viết này để chia sẽ cách mình đã làm. Cũng hông khó lắm. Winking smileOpen-mouthed smile

1. Tạo Windows From Application project mới và add thư viện cần sử dụng.

–  Đầu tiên bạn tạo project windows form application như bình thường.

–  Copy file CustomFileExtensionControl.dll vào thư mục bin\Debug của project.

–  Click chuột phải vào project trong thanh Solution Explorer chọn Add Reference

image

–  Rồi add vào file CustomFileExtensionControl.dll thiết sử dụng trong chương trình.

image

–  Giờ thì trong code của chương trình ta khai báo sử dụng thư viện vừa add vào:

using CustomFileExtensionControl;

Ngoài ra chúng ta còn phải khai báo thêm 2 using sau đây:

using System.IO;
using System.Runtime.InteropServices;

2. Nguyên tắc thực hiện của chương trình

–  Chương trình thực hiện việc đăng ký đuôi mở rộng chương trình của bạn trong regedit trong khóa HKEY_CLASSES_ROOT. (Có thể tìm hiểu thêm về cách đọc và ghi regedit với C# ở đây)

–  Việc thực hiện của chương trình giống như việc sử dụng open with rồi chọn chương trình cần mở file đó trong Windows Explorer.

image

–  Vì bài viết này chỉ tập trung vào việc giải quyết vấn đề áp dụng icon cho đuôi mở rộng của chương trình. Do dó tôi sẽ không giải thích dài dòng mà chỉ tập trung vào việc sử dụng làm sao cho chúng ta có thể thực hiện một cách nhanh chóng trong code của chương trình bằng cách sử dụng một thư viện đã được build sẵn. Ở cuối bài viết tôi sẽ cung cấp source code của thư viện này.

3. Source code chương trình

–  Đầu tiên để chương trình thực hiện được những tính năng nói trên. Trong Windows 7 chương trình cần một yêu cầu chạy với quyền Admin, nếu không chương trình sẽ báo lỗi.  Việc thực hiện bạn có thể tham khảo bài viết ở đây.

–  Và đây là source code chính của chương trình:

Chương trình này sẽ áp dụng cho những file có đuôi mở rộng  là:  .thanhcuong

using System.IO;
using System.Runtime.InteropServices;
using CustomFileExtensionControl;

namespace Embed_Icon_File_Extension
{
    public partial class Form1 : Form
    {
        CustomFileExtensionControl.App app1 = new CustomFileExtensionControl.App();
        CustomFileExtensionControl.App app2 = new CustomFileExtensionControl.App();        
        CustomFileExtension customFileExtension1 = new CustomFileExtension();

        private const int WM_COPYDATA = 0x4A;

        struct COPYDATASTRUCT
        {
            public IntPtr dwData;
            public int cbData;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpData;
        }

        public Form1()
        {
            InitializeComponent();            
            this.MaximizeBox = false;
            this.StartPosition = FormStartPosition.CenterScreen;

            customFileExtension1.ApplicationName = "Embed Icon File Extension.exe";
            customFileExtension1.Description = "THANHCUONG\'s file";
            customFileExtension1.EmbeddedIcon = false;
            customFileExtension1.Extension = ".thanhcuong"; // đuôi file mở rộng là ".thanhcuong"
            customFileExtension1.Handler = "thanhcuong.wordpress.com";
            customFileExtension1.IconName = "tree.ico";  // File icon cho đuôi mở rộng cần hiển thị.
            customFileExtension1.IconPosition = 0;
            customFileExtension1.OpenText = "Open me this instant";
            app1.AppPath = "C:\\Users\\Administrator\\Desktop\\ThanhCuong.exe";   // Add ứng dụng vào menu openwith
            app2.AppPath = "C:\\Users\\Administrator\\Desktop\\ThanhCuong.exe";
            this.customFileExtension1.OpenWith.Add(app1);
            this.customFileExtension1.OpenWith.Add(app2);
        }

        public Form1(string[] args)
        {
            InitializeComponent();
            OpenFile(args);
        } 

        FileStream fs;
        StreamReader sr;

        private void OpenFile(string[] args)
        {
            for (int i = 0; i < args.Length; i++)
            {
                fs = new FileStream(args[i], FileMode.Open);
                sr = new StreamReader(fs);

                MessageBox.Show(sr.ReadToEnd());
            }

            fs.Close();
            fs.Dispose();
            sr.Close();
            sr.Dispose();
        }

        private void btnInstall_Click(object sender, EventArgs e)
        {
            customFileExtension1.RegisterFileType();
        }

        private void btnUninstall_Click(object sender, EventArgs e)
        {
            customFileExtension1.RemoveFileType();
        }

        protected override void WndProc(ref Message message)
        {
            if (message.Msg == WM_COPYDATA)
            {
                COPYDATASTRUCT mystr = (COPYDATASTRUCT)message.GetLParam(typeof(COPYDATASTRUCT));
                Type mytype = mystr.GetType();
                mystr = (COPYDATASTRUCT)message.GetLParam(mytype);

                string[] args = customFileExtension1.GetData(mystr.lpData);

                OpenFile(args);
            }
            base.WndProc(ref message);
        }
    }
}

4. Kết quả chương trình Demo

–  Giao diện chương trình:

image

–  Chương trình sẽ tiến hành áp dụng icon có hình cây thông như hình trên cho các file có đuôi mở rộng là .thanhcuong, và cũng có thể gở bỏ áp dụng này.

–  Khi thực thi chương trình sẽ yêu cầu chạy với quyền Admin. Nếu như bạn Debug từ visual studio, thì phải chạy visual studio với quyền admin thì chương trình mới có thể thực hiện việc ghi vào regedit được.

–  Và đây là kết quả thực thi chương trình khi áp dụng icon cho file .thanhcuong

image

–  Kết quả sau khi gở bỏ áp dụng icon đối với file .thanhcuong

image

5. Source code demo

–  Click vào đây để download source code demo chương trình áp dụng icon cho đuôi mở rộng của chương trình viết trên visual studio 2010 (C#).

–  Click vào đây để download source code thư viện CustomFileExtensionControl.dll viết trên visual studio 2010 (C#).

Chúc thành công!

For Better Lifer

Advertisements

About thanhcuong1990

Handsome and talent!! ^^
This entry was posted in C#. Bookmark the permalink.

4 Responses to Áp dụng icon cho các file có đuôi mở rộng do chương trình tạo ra trong C#

  1. NTH says:

    cảm on bạn rất nhiều. Mình đang cũng đang rất muốn tìm hiểu về vấn đề này ! Thanks

  2. lanueng says:

    bài viết hay lắm,mình củng đang làm chương trình như thế này!
    mình bị vướng một chút ở chổ khi kick vào file của mình nó chạy lên chương trình của mình rùi
    nhưng mình không biêt lấy tên và đường dẩn đầy đủ của file mình vừa kick
    để nạp vào chương trình của mình,để chương trình load nội dung file đó.
    Rất mong được chỉ giúp.cám ơn!

  3. Thanh says:

    Bài viết hay lắm, mình đang gặp rắc rối ở phần này, nhưng mình ko down đuợc file về để test, bạn có thể cho mình xin file demo được ko, mail mình là lethanh603@gmail.com. xin cảm ơn

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s