PDA

View Full Version : سوال: نياز به راه حل براي پروژه تبديل نوع فايل؟



Parham.D
پنج شنبه 17 بهمن 1387, 15:04 عصر
سلام به دوستان و اساتيد گرامي.

اول از همه بگم كه جستجو نكردم، چرا كه نمي‏دانستم چه چيزي را بايد جستجو كنم!!


در حال نوشتن يك برنامه كوچك هستم كه با كليك سمت راست بر روي فايل عكس در خود محيط ويندوز گزينه‏اي براي تبديل وجود دارد كه با انتخاب آن برنامه اصلي شروع مي‏شود (مثل winrar)


سوالات:
چگونه برنامه بايد تشخيص دهد كه چه نوع فايل تصويري انتخاب شده است؟
چگونه برنامه بايد تشخيص دهد كه چند فايل انتخاب شده است؟
چگونه برنامه مي‏تواند مشخصات موارد انتخاب شده را تشخيص دهد (سايز و آدرس)؟
آيا نياز به API است؟ چه نوع API ي لازم است؟

با سپاس از همكاري و راهنمايي شما . . .

Sajjad.Aghapour
جمعه 18 بهمن 1387, 01:08 صبح
نه دوست عزیز.نیازی به API نیست.این نمونه رو برات نوشتم که روال کلی کار دستت بیاد.بقیش رو می تونی طبق همین نمونه پیاده سازی کنی...
برای تشخیص نوع هم می تونی از متد زیر استفاده کنی.....


Path.GetExtension

...
به تغییرات ایجاد شده در کلاس Program توجه کنید....
...

Amir Oveisi
جمعه 18 بهمن 1387, 12:09 عصر
کلا اسم و آدرس فایلها بصورت آرگومان متد main وارد برنامه میشن و میتونن از اونا استفاده کنید.

موفق باشید
jooje

Parham.D
سه شنبه 20 اسفند 1387, 12:55 عصر
سلام خدمت آقایان sajjadlove و vermoda. من برنامه‏ای را که آقای sajjadlove برای من گذاشتند را بررسی و نمونه آن را در برنامه خود قرار دادم، اما با دو مشکل برخورد کردم.

1. آدرس فایلی که وارد برنامه می‏شود گاهی ناقص است و نتیجه آن پیغام خطا است. برای مثال آدرس زیر:

c:\my picture \picture.jpg

به صورت زیر وارد برنامه می‏شود (به دلیل فاصله بین my و picture در آدرس فولدر:

c:\my


2. اگر آدرس کامل وارد شود مشکل دوم پیش می‏آید و آن این است که برنامه فقط از ورودی می‏تواند یک فایل دریافت کند، اگر من دو فایل را انتخاب کنم برنامه به تعداد فایلهای انتخاب شده کادر Move To . . را نمایش می‏دهد!!!! هر چند گه آرگومان به صورت آرایه است. جالب اینجاست که مشکلات گفته شده در vista وجود ندارد و فقط در XP خود را نشان می‏دهد! البته این مشکل در vista وجود دارد که با انتخاب دو فایل دو بار برنامه اصلی باز می‏شود.

اصل برنامه را به صورت zip گذاشته و نمونه کد را در زیر می‏بینید.







static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
//Collection of registry keys value.

System.Collections.Specialized.StringDictionary RegistryKeys = new System.Collections.Specialized.StringDictionary();

//Set values for collection.

RegistryKeys.Add(@"jpegfile\shell", @"jpegfile\shell\Convert Pictures");
RegistryKeys.Add(@"bmpfile\shell", @"bmpfile\shell\Convert Pictures");
RegistryKeys.Add(@"giffile\shell", @"giffile\shell\Convert Pictures");
RegistryKeys.Add(@"pngfile\shell", @"pngfile\shell\Convert Pictures");
RegistryKeys.Add(@"tiffile\shell", @"tiffile\shell\Convert Pictures");
//Search each keys of collection in registry. If is not exist, create it.

foreach (string item in RegistryKeys.Keys)
{
if (Registry.ClassesRoot.OpenSubKey(item) != null)
{
Registry.ClassesRoot.CreateSubKey
(RegistryKeys[item]).CreateSubKey("command").SetValue(null, "\"" + Application.ExecutablePath + "\" " + "%L");
//Registry.ClassesRoot.CreateSubKey(RegistryKeys[item]).Close();

}
}
try

{
Application.Run(new MainForm(args[0]));
}
catch

{
Application.Run(new MainForm());
}
}

Parham.D
پنج شنبه 22 اسفند 1387, 07:06 صبح
از دوستان عزيز و اساتيد گرامي كسي نيست كمك كنه؟؟!! شايد من بد توضيح دادم.

با سپاس فراراوان از كمك شما دوستان. . . .