FileAssociation در سی شارپ

#C

توسط thearrow در 4 سال پیش
0 994 1 4 سال پیش
thearrowreza-irdev
1

سلام. من واسه اینکه تمامی فایلهای pashmakproj رو بتونم با برنامه ی اختصاصی خودم باز کنم، این کد رو استفاده کردم: کلاس:

    public class FileAssociation
    {
        public static void Associate(string extension,
               string progID, string description, string icon, string application)
        {
            Registry.ClassesRoot.CreateSubKey(extension).SetValue("", progID);
            if (progID != null && progID.Length > 0)
                using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(progID))
                {
                    if (description != null)
                        key.SetValue("", description);
                    if (icon != null)
                        key.CreateSubKey("DefaultIcon").SetValue("", ToShortPathName(icon));
                    if (application != null)
                        key.CreateSubKey(@"Shell\Open\Command").SetValue("",
                                    ToShortPathName(application) + " \"%1\"");
                }
        }

        public static bool IsAssociated(string extension)
        {
            return (Registry.ClassesRoot.OpenSubKey(extension, false) != null);
        }

        [DllImport("Kernel32.dll")]
        private static extern uint GetShortPathName(string lpszLongPath,
            [Out] StringBuilder lpszShortPath, uint cchBuffer);

        private static string ToShortPathName(string longName)
        {
            StringBuilder s = new StringBuilder(1000);
            uint iSize = (uint)s.Capacity;
            uint iRet = GetShortPathName(longName, s, iSize);
            return s.ToString();
        }
    }

استفاده:

            FileAssociation.Associate(".pashmakproj", "02639d71-0935-35e8-9d1b-9dd1a2a34627", "Pashmak Project",
                    @"C:\Users\Pashmak\Desktop\icon.ico",
                   @"C:\Users\Pashmak\Desktop\wppp.exe");

کدِ هیچ مشکلی نداره و تمامی فایل های pashmakproj رو با برنامه ـم باز میکنه. تنها مشکلی که هست اینه که چطوری باید وقتی کاربر روی یکی از پروژه ها کلیک کرد،اطلاعات اون پروژه به برنامه داد؟ الان من یک قسمت Open Project رو هم توی برنامه ـم گذاشتم که کاربر میتونه دستی پروژه رو انتخاب کنه و بعد از انتخاب اون اطلاعات  به برنامه داده میشه.(این قسمت درسته) میخوام بدونم چطوری باید کاری کرد وقتی برنامه بسته هست، و کاربر روی یکی از پروژه ها کلیک میکنه اون اطلاعات رو به برنامه داد؟ مثل خیلی از برنامه ها از جمله خود ویژوال استودیو. راجع به عنوان هم ببخشید نمیدونستم چی بزارم.

ممنون

2

سلام مسیر فایل باز شده تو آرگومان متد Main قرار میگیره. فقط کافیه به شکل زیر دریافتش کنید:

.
.
.
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            if (args.Length != 0)
            {
                string file = args[0];
                MessageBox.Show(file);
            }
.
.
.

اینجا متغیر file حاوی مسیر فایل باز شده است که میتونید کاراتون رو انجام بدید.

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید