PDA

View Full Version : سوال: باز کردن فایلها با پروژه سی شارپ مانند پلیرها؛ File Association



Rad Data
دوشنبه 22 دی 1393, 21:39 عصر
با سلام و خسته نباشید
چطور میشه فایلهایی رو با برنامه ای که نوشتیم باز کنیم؟:متفکر:
یه برنامه نسبتا پیشرفته برای مشاهده و ویرایش تصاویر نوشتم. قابلیت درگ دروپ عادی رو داره که مثلا اگه عکسی رو داخل برنامه درگ کنم، اون عکس رو نمایش میده و اماده ویرایش میکنه.
حالا فقط میخام اگه عکس روی فایل اجرایی برنامه یا شورتکات برنامه روی دسکتاپ درگ دروپ شد(یا از طریق اپن ویچ جهت اجرا با برنامه ای
که نوشتم انتخاب شد)، اون رو نمایش بده . مثل ویندوز فوتو ویور یا پینت و غیره...

یه سوال دیگه اینکه وقتی روی لیبل ها دو بار کلیک میکنیم، متن اون لیبل در کلیپبرد کپی میشه. چطور میشه مانع این کار شد؟:متفکر:

اگه سوالم رو جای مناسبی مطرح نکردم معذرت میخام

aminmousavi
چهارشنبه 24 دی 1393, 23:51 عصر
سلام دوست عزیز ، با کد زیر اگر برنامه از طریق drag and drop یک فایل درون برنامه شما باز شده باشه ، آدرس رو بهتون برمیگردونه ::

string[] args = Environment.GetCommandLineArgs();
MessageBox.Show(args[1].ToString());

پ.ن : توی PageLoad بنویسین کد زیر رو

موفق باشی

Rad Data
پنج شنبه 25 دی 1393, 01:49 صبح
واقعا ممنون از دوستان عزیز مشکلم حل شد. aminmousavi ♥لایک با سینتکس♥:لبخند:
دادا system من حدود یه هفته اس دنبال این کد ها بودم....به هر زبونی هم توی اینترنت گشتم ولی چیزی پیدا نکردم:خجالت:
سوال دوممو هم کسی میتونه جواب بده؟(وقتی روی لیبل ها دو بار کلیک میکنیم، متن اون لیبل در کلیپبرد کپی میشه. چطور میشه مانع این کار شد؟)
یه مشکل دیگه در تغیر اندازه عکسها دارم. در قسمت بیتمپ اگه اندازه عکس مثلا بیشتر از 10 هزار پیکسل باشه برنامه گاهی خطا میده
int width=10000,height=10000;
Bitmap bitmap = new Bitmap(width, height);
راه حل چیه؟ از کلاس یا کد دیگه ای نمیشه عکس رو تغیر اندازه داد؟

چون سوالاتم کوچیک بود تایپیک جدید باز نکردم....ممنون میشم کمک کنین:قلب::لبخند:

aminmousavi
پنج شنبه 25 دی 1393, 01:57 صبح
خواهش میکنم :)
1 - یعنی چی ؟ رو label عادی دوبار کلیک کنی که توی clipboard ذخیره نمیشه ، حتما کدی روش نوشتین دیگه ، یکم سوالتون ابهام داره !
2- در مورد دومی هم ، من همچین مشکلی نخوردم ، متن error رو قرار بده شاید بشه راهنمایی کرد .

Rad Data
پنج شنبه 25 دی 1393, 12:44 عصر
روز بخیر:لبخند:
در ویندوز 8.1 روی هر لیبلی که دابل کلیک میکنم متن اون در کلیپبرد ذخیره میشه اما در ویندوز 7 ذخیره نمیشه. نمیدونم چه ربطی به ویندوز داره:متفکر:
هیچ کدی هم برای ذخیره شدن در کلیپبرد ننوشتم

در مورد مشکل دوم در ریسایز کردن عکس ها
وقتی اندازه عکس رو بیشتر از 10000 پیکسل میکنم از خط بیتمپ خطا میگیره که....:افسرده:
Additional information: Parameter is not valid.
127574

xxnagin
پنج شنبه 25 دی 1393, 19:05 عصر
سلام
با File Association دیگه تو www.codeproject.com (http://www.codeproject.com) و اینترنت زیاده یا همین سایت
با Class #C
http://www.codeproject.com/Articles/43675/C-FileAssociation-Class

با vb.net که سورس کامل

http://www.codeproject.com/Articles/18594/File-Association-in-VB-NET

ریجستری
http://www.codeproject.com/Articles/29137/Get-Registered-File-Types-and-Their-Associated-Ico

Rad Data
دوشنبه 29 دی 1393, 03:32 صبح
تشکر دوست عزیز xxnagin:لبخند:
با برسی لینک هایی که دادین، کدهارو برسی کردم و یک کلاس یا فانکشن برای اضافه کردن پسوند فایل به ریجستری نوشتم که شاید به درد دوستان بخوره:چشمک:

private void messageError(string errorText) { MessageBox.Show(errorText, "Rad Data Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign); }


public void Create(string fileTypes, string progID, string description, string defaultIcon, string execApp, string[] openWith)
{
if (!fileTypes.StartsWith(".") || fileTypes.Length < 3) { messageError("پسوند فایل باید بیشتر از 2 کاراکتر باشد و با دات شروع شود"); }
else if (progID.StartsWith(".") || progID.Length < 5) { messageError("ایدی کلید برنامه باید بیشتر از 4 کاراکتر باشد و با دات شروع نشود"); }
else if (description.Length < 5) { messageError("توضیحات برنامه باید بیشتر از 4 کاراکتر باشد"); }
else if (!File.Exists(defaultIcon)) { messageError("فایل ایکون وجود ندارد"); }
else if (!File.Exists(execApp)) { messageError("فایل اجرایی وجود ندارد"); }
else
{
try
{
if (Registry.GetValue("HKEY_CLASSES_ROOT\\" + progID, "", null) != null)
{
int intt = 0;
for (int trueint = 0; trueint < 1; ) { intt++; if (Registry.GetValue("HKEY_CLASSES_ROOT\\" + progID + "_" + intt, "", null) == null) { trueint = 1; progID += "_" + intt; } }
}
RegistryKey key = Registry.ClassesRoot;
key.CreateSubKey(fileTypes).SetValue("", progID);
key = key.CreateSubKey(progID, RegistryKeyPermissionCheck.ReadWriteSubTree);
key.SetValue("", description, RegistryValueKind.String);
key.CreateSubKey("DefaultIcon").SetValue("", defaultIcon, RegistryValueKind.String);
key.CreateSubKey(@"Shell\Open\Command").SetValue("", "\"" + execApp + "\"" + " %1", RegistryValueKind.String);
if (openWith.Length > 0)
{
key = key.CreateSubKey("OpenWithList", RegistryKeyPermissionCheck.ReadWriteSubTree);
foreach (string str in openWith)
{
key.CreateSubKey(str);
}
}
key.Flush();
key.Close();
MessageBox.Show("ذخیره شد");
}
catch { messageError("خطا"); }
}
}

نحوه استفاده(مثال):بامزه:

Create(".rad", "RadData", "Rad Data New App", "C:\\icon.ico", "C:\\MyApp.exe", new string[] { "WordPad.exe", "IExplore.exe", "notepad.exe" });

فقط این قسمتش شاید برای بعضیا سوال باشه که چرا توی حلقه اس:متعجب:
if (Registry.GetValue("HKEY_CLASSES_ROOT\\" + progID, "", null) != null)
{
int intt = 0;
for (int trueint = 0; trueint < 1; ) { intt++; if (Registry.GetValue("HKEY_CLASSES_ROOT\\" + progID + "_" + intt, "", null) == null) { trueint = 1; progID += "_" + intt; } }
}
و پاسخ: چون اگه اون کلید(اسم یا ایدی که انتخاب میکنین) قبلا موجود باشه و شما تغیرش بدین، اون برنامه ای که اون کلید رو استفاده میکرده به مشکل میخوره. من تو حلقه کامل برسی میکنم که همچین کلیدی از قبل وجود نداشته باشه:لبخند:
افرین به خودم:لبخند:
برنامه باید در حالت ادمین اجرا بشه....چون کاربر فقط میتونه روت ریجستری رو بخونه، نمیتونه چیزی اضافه کنه

من یه برنامه نوشتم که هم میشه همه پسوندایی که توی ریجستری ذخیره شدنو همراه ایکنشون دید....هم اضافه کرد و هم حذف کرد
برنامرو برای دانلود میذارم
Rad Data - File Types On the Registry.rar (http://upload7.ir/download/54bc52981441f/Rad Data - File Types On the Registry.rar)
دانلود (http://upload7.ir/preview.php?user=&file=d1ecd6bc7ebf7dd40b722bd7886384da741c7057)
امیدوارم مفید باشه:لبخند: