26/07/2019, 10:18

[C#] Hướng dẫn tạo icon cho file extension mới trong winform

Xin chào các bạn, bài viết hôm nay mình sẽ hướng dẫn các bạn các nhúng icon vào file mới tạo ( icon file extension ) trong lập trình C#. Thường các bạn thấy các file của ứng dụng, ví dụ như file: word, excel, pdf ... thì khi chúng ta cài chương trình đọc vào, ...

Xin chào các bạn, bài viết hôm nay mình sẽ hướng dẫn các bạn các nhúng icon vào file mới tạo (icon file extension) trong lập trình C#.

Thường các bạn thấy các file của ứng dụng, ví dụ như file: word, excel, pdf... thì khi chúng ta cài chương trình đọc vào, thì icon của file đó nó sẽ giống icon của ứng dụng chương trình đó.

Các bạn lập trình, đôi lúc chúng ta cần tạo ra một kiểu file với phần mở rộng mới, theo tên ứng dụng của mình.

Mình ví dụ file của mình có đuôi *.thaomeo, thì khi chúng ta tạo file này ra thì hình ảnh icon nó là màu trắng.

Vậy trong bài viết này, mình sẽ chia sẽ cho các bạn cách để add icon đó vào file có phần mở rộng của mình.

Và khi click vào file có đuôi mở rộng của mình, sẽ tự động mở lên ứng dụng của mình luôn.

VD: Khi bạn click vào file word thì nó tự động mở MS Word (Click vào file đuôi *.thaomeo, mở ứng dụng của mình).

Để thay đổi icon của một phần mở rộng của ứng dụng, các bạn sẽ chỉnh sửa trong Regedit của Windows.

Các bạn có thể tìm hiểu, cách chỉnh bằng tay trên windows nhé. Trong bài này, mình chỉ hướng dẫn các bạn cách nhúng icon vào trên phẩn mểm.

Giao diện demo ứng dụng nhúng Icon file C#:

icon_csharp_nhung

  • Hình ảnh demo ứng dụng sau khi chạy chương trình.

icon_csharp_nhung2

Và khi chúng ta click hoặc right click vào file có đuôi mở rộng *.thaomeo, nó sẽ cho phép mình mở file này bằng ứng dụng của mình.

icon_csharp_nhung3

Trong bài viết, mình có sử dụng thư viện CustomFileExtensionControl.dll, các bạn download source code ở cuối bài để tích hợp thư viện này vào project của mình nhé.

Source code Nhúng Icon vào file mới C#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

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 = "THAOMEO's file";
            customFileExtension1.EmbeddedIcon = false;
            customFileExtension1.Extension = ".thaomeo"; 
            customFileExtension1.Handler = "laptrinhvb.net";
            customFileExtension1.IconName = "logo_dhq_icon.ico";  
            customFileExtension1.IconPosition = 0;
            customFileExtension1.OpenText = "Mở ứng dụng với Laptrinhvb.net";
            app1.AppPath = "C:\Users\Administrator\Desktop\thaomeo.exe";   // Add ứng dụng vào menu openwith
            app2.AppPath = "C:\Users\Administrator\Desktop\thaomeo.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);
        }

       
    }
}

Thanks for watching!

DOWNLOAD SOURCE

Tags: icon new extension file c#icon file c#
0