نمایش نتایج 1 تا 5 از 5

نام تاپیک: دریافت آرگومان جدید (نام چند فایل) توسط یک نمونه از برنامه در حال اجرا؛ Single Instance App

  1. #1

    دریافت آرگومان جدید (نام چند فایل) توسط یک نمونه از برنامه در حال اجرا؛ Single Instance App

    سلام
    دوستان اینجا کسی با File Association آشنایی داره؟
    مثلا یه کار کنی فایل های MP3 با برنامه خود آدم پخش بشه!
    آخرین ویرایش به وسیله Mahmoud.Afrad : یک شنبه 30 خرداد 1395 در 20:20 عصر

  2. #2

    نقل قول: آشنایی با File Association؟

    سلام،
    این کلاس برای File Association هست:

    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();
    }
    }


    روش استفاده:
     FileAssociation.Associate(".pashmakproj", "02639d71-0935-35e8-9d1b-9dd1a2a34627", "Pashmak Project",
    @"C:\Users\Pashmak\Desktop\icon.ico",
    @"C:\Users\Pashmak\Desktop\wppp.exe");


    توضیحات بیشتر در سافت افزار
    آخرین ویرایش به وسیله Mahmoud.Afrad : دوشنبه 31 خرداد 1395 در 13:23 عصر

  3. #3

    نقل قول: آشنایی با File Association؟

    نقل قول نوشته شده توسط ramtinak مشاهده تاپیک
    سلام،
    این کلاس برای File Association هست:

    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();
    }
    }


    روش استفاده:
     FileAssociation.Associate(".pashmakproj", "02639d71-0935-35e8-9d1b-9dd1a2a34627", "Pashmak Project",
    @"C:\Users\Pashmak\Desktop\icon.ico",
    @"C:\Users\Pashmak\Desktop\wppp.exe");


    توضیحات بیشتر در سافت افزار
    مرسی داداش. ولی اینو خودم میدونم که چه جوری برناممو رو یه پسوندی ست کنم! کلا میخواستم بدون کی با این موضوع کار کرده و آشنایی داره.
    سوال اصلیم اینه که فرص کنید 5 تا فایل آهنگ رو از تو محیط ویندوز سلکت میکنم بعد رو دکمه اینتر که میزنم میخوام اون فایل ها به پلی لیست موزیک پلیری که درست کردم اضافه بشه! در واقع میخوام بدونم چه جوری میتونم آدرس اون فایل ها رو پیدا کنم؟
    چون وقتی تو رجیستری یه پسوندی رو ست میکنی فقط آدرس یک فایل رو به عنوان آرگومنت به برنامه میفرسته ولی من میخوام همه فایل هایی که انتخاب میشند فرستاده بشه آدرسشون.

  4. #4

    نقل قول: آشنایی با File Association؟

    از لینک زیر استفاده کنید (رفرنس Microsoft.VisualBasic نیاز است)
    http://www.hanselman.com/blog/TheWee...lBasicdll.aspx
    میتونید کد لینک بالا رو به صورتی اصلاح کنید که با یک رویداد بتونید آرگومانهای جدید رو دریافت کنید:
        using System;
    using System.Windows.Forms;
    using System.Collections.ObjectModel;
    using Microsoft.VisualBasic.ApplicationServices;

    static class Program
    {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    private static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(fals e);
    string[] arguments = Environment.GetCommandLineArgs();
    SingleInstanceController controller = new SingleInstanceController(new Form1());
    controller.Run(arguments);
    }

    public class SingleInstanceController : WindowsFormsApplicationBase
    {
    private Form _frm;

    internal delegate void RecieveDelegate(object sender, CommandLineEventArgs e);

    public static event RecieveDelegate RecievedArgs;

    public SingleInstanceController(Form form)
    {
    _frm = form;
    IsSingleInstance = true;

    StartupNextInstance += SingleInstanceController_StartupNextInstance;
    }

    private void SingleInstanceController_StartupNextInstance(objec t sender, StartupNextInstanceEventArgs e)
    {
    OnRecievedArgs(new CommandLineEventArgs(e.CommandLine));
    }

    protected override void OnCreateMainForm()
    {
    MainForm = _frm;
    }

    protected virtual void OnRecievedArgs(CommandLineEventArgs e)
    {
    if (RecievedArgs != null) RecievedArgs(this, e);
    }

    public class CommandLineEventArgs : EventArgs
    {
    private ReadOnlyCollection<string> _commandLineArguments;

    public CommandLineEventArgs(ReadOnlyCollection<string> commandLineArguments)
    {
    _commandLineArguments = commandLineArguments;
    }

    public ReadOnlyCollection<string> CommandLineArguments
    {
    get { return _commandLineArguments; }
    }
    }
    }
    }

    حالا میتونید در جایی که نیاز دارید رویداد RecievedArgs رو هندل و از طریق پراپرتی commandLineArguments مقادیر پارامترها رو بدست بیارید.

  5. #5

    نقل قول: آشنایی با File Association؟

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    از لینک زیر استفاده کنید (رفرنس Microsoft.VisualBasic نیاز است)
    http://www.hanselman.com/blog/TheWee...lBasicdll.aspx
    میتونید کد لینک بالا رو به صورتی اصلاح کنید که با یک رویداد بتونید آرگومانهای جدید رو دریافت کنید:
        using System;
    using System.Windows.Forms;
    using System.Collections.ObjectModel;
    using Microsoft.VisualBasic.ApplicationServices;

    static class Program
    {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    private static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(fals e);
    string[] arguments = Environment.GetCommandLineArgs();
    SingleInstanceController controller = new SingleInstanceController(new Form1());
    controller.Run(arguments);
    }

    public class SingleInstanceController : WindowsFormsApplicationBase
    {
    private Form _frm;

    internal delegate void RecieveDelegate(object sender, CommandLineEventArgs e);

    public static event RecieveDelegate RecievedArgs;

    public SingleInstanceController(Form form)
    {
    _frm = form;
    IsSingleInstance = true;

    StartupNextInstance += SingleInstanceController_StartupNextInstance;
    }

    private void SingleInstanceController_StartupNextInstance(objec t sender, StartupNextInstanceEventArgs e)
    {
    OnRecievedArgs(new CommandLineEventArgs(e.CommandLine));
    }

    protected override void OnCreateMainForm()
    {
    MainForm = _frm;
    }

    protected virtual void OnRecievedArgs(CommandLineEventArgs e)
    {
    if (RecievedArgs != null) RecievedArgs(this, e);
    }

    public class CommandLineEventArgs : EventArgs
    {
    private ReadOnlyCollection<string> _commandLineArguments;

    public CommandLineEventArgs(ReadOnlyCollection<string> commandLineArguments)
    {
    _commandLineArguments = commandLineArguments;
    }

    public ReadOnlyCollection<string> CommandLineArguments
    {
    get { return _commandLineArguments; }
    }
    }
    }
    }

    حالا میتونید در جایی که نیاز دارید رویداد RecievedArgs رو هندل و از طریق پراپرتی commandLineArguments مقادیر پارامترها رو بدست بیارید.
    ممنون. ولی بعید میدونم که در این کد هم بیش از 1 آرگومان فرستاده بشه! میشه!؟
    از همه این کدهایی که واسه Single Instance کردن برنامه هست استفاده کردم از این سینگل اینستنس ویبی هم استفاده کردم ولی همچنان فقط آدرس یک فایل فرستاده میشه! البته اینی که شما دادین رو امتحان نکردم ولی بیسش به هرحال باید همون مدلی باشه!

تاپیک های مشابه

  1. آموزش: اجرای تنها یک نمونه از برنامه در زمان اجرا
    نوشته شده توسط ایمان مدائنی در بخش C#‎‎
    پاسخ: 0
    آخرین پست: چهارشنبه 22 خرداد 1392, 17:26 عصر
  2. عدم اجرای بیش از یک نمونه از برنامه در هر لحظه
    نوشته شده توسط BehinAfzar در بخش C#‎‎
    پاسخ: 3
    آخرین پست: پنج شنبه 26 بهمن 1391, 11:32 صبح
  3. مبتدی: اجرای فقط یک نمونه از برنامه در آن واحد
    نوشته شده توسط mas'oud در بخش C#‎‎
    پاسخ: 2
    آخرین پست: سه شنبه 06 اردیبهشت 1390, 00:20 صبح
  4. چگونه می توان فهمید که یک فرم از برنامه در حال اجراست یا خیر
    نوشته شده توسط دنی کوئیل در بخش برنامه نویسی در Delphi
    پاسخ: 8
    آخرین پست: جمعه 23 دی 1384, 06:12 صبح
  5. میخواهم فقط یک نمونه از کلاس در حال اجرا باشد .....
    نوشته شده توسط Babak-Aghili در بخش C#‎‎
    پاسخ: 5
    آخرین پست: سه شنبه 24 خرداد 1384, 18:38 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •