PDA

View Full Version : سوال: باز کردن فایل با تغییر Change داخل Properties



forodo
یک شنبه 12 مرداد 1393, 00:06 صبح
سلام
وقتی که روی فایل راست کلیک کنید و Properties رو بزنید پنجره زیر باز می شه.
اون کادر قرمز رو که بزنید که نوشته Change یه پنجره باز میشه که میگه پیش فرض می خواید این فایل رو با چه برنامه ای باز کنید.
من به دلایلی نیاز دارم که با اینکه این فایل با Windows Photo Viewer نوشته پیش فرض باز می شه ولی می خوام که Change رو بزنم و گزینه Windows Photo Viewer رو انتخاب کنم.
چطوری می تونم با کد اینکار رو انجام بدم؟
با تشکر
http://upload7.ir/imgs/2014-08/97212929300562741694.png

khokhan
یک شنبه 12 مرداد 1393, 01:15 صبح
سلام
وقتی که روی فایل راست کلیک کنید و Properties رو بزنید پنجره زیر باز می شه.
اون کادر قرمز رو که بزنید که نوشته Change یه پنجره باز میشه که میگه پیش فرض می خواید این فایل رو با چه برنامه ای باز کنید.
من به دلایلی نیاز دارم که با اینکه این فایل با Windows Photo Viewer نوشته پیش فرض باز می شه ولی می خوام که Change رو بزنم و گزینه Windows Photo Viewer رو انتخاب کنم.
چطوری می تونم با کد اینکار رو انجام بدم؟
با تشکر

آسانترین راه اینه که در ریجستری ویندوز ودر شاخهHKEY_CLASSES_ROOT یه کلید تعریف کنی با این مضمون که به عنوان مثال تمام فایلهای از نوع doc رو با نرم افزار فلان باز کن
وداخل کلید جدید که ایجاد کردی مسیر فایل اجرایی مذکور رو می دی

و اینکار رو از طریق کد نویسی هم می تونی انجام بدی :

رفرنسها


using Microsoft.Win32;
using System.Runtime.InteropServices;

متد ها :




public class FileAssociation{

public static void Associate(string extension,
string progID, string description, string icon, string application)
{
Registry.ClassesRoot.CreateSubKey(extension).SetVa lue("", 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();
}

}

فراخوانی :



if (!FileAssociation.IsAssociated(".ext")) Associate(".ext", "ClassID.ProgID", "ext File", "YourIcon.ico", "YourApplication.exe");

forodo
یک شنبه 12 مرداد 1393, 11:54 صبح
ادامه مشکل که به این ربط داره. (http://barnamenevis.org/showthread.php?463304-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%86%DA%A9%D8%B1%D8%AF%D9%86-%D8%B9%DA%A9%D8%B3-%D8%A2%DB%8C%DA%A9%D9%88%D9%86-%D8%A8%D8%B9%D8%AF-%D8%A7%D8%B2-%DA%A9%D9%BE%DB%8C-%DA%A9%D8%B1%D8%AF%D9%86&p=2074643#post2074643)