c# 設置winform程序為默認打開軟件 在運行中獲取參數


1.右鍵→打開方式→選擇默認程序→選擇winform程序

2.修改Program.cs

判斷注冊的事件是否存在,如果不存在則運行實例,並把參數傳入MainForm里,如果存在則把參數寫到txt文件中,然后發事件,退出

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Windows.Forms;

namespace SimpleMusicPlayer
{
    static class Program
    {
        public static EventWaitHandle ProgramStarted;

        /// <summary>
        /// 應用程序的主入口點。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            // 嘗試創建一個命名事件  
            bool createNew;
            ProgramStarted = new EventWaitHandle(false, EventResetMode.AutoReset, "MyStartEvent", out createNew);

            // 如果該命名事件已經存在(存在有前一個運行實例),則發事件通知並退出  
            if (!createNew)
            {
                // 先寫一些數據到txt中,以便傳遞給前一個運行實例
                //Registry.SetValue(@"HKEY_CURRENT_USER\Software\MyMusic", "", string.Join(",", args));
                string fileName = Application.StartupPath + "\\args.txt";
                StreamWriter sw = new StreamWriter(fileName, false);
                sw.WriteLine(args[0]);//開始寫入值
                sw.Close();

                ProgramStarted.Set();
                return;
            }
            else
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainForm(args.Length==0?null:args[0]));
            }

        }

    }
}

3.MainForm.cs

當收到第二個進程的通知時,讀取txt中參數(MP3路徑),顯示窗體

     public MainForm(string param)
        {
            InitializeComponent();

            if (param != null)
                setFileName(param);

            ThreadPool.RegisterWaitForSingleObject(Program.ProgramStarted, OnProgramStarted, null, -1, false);
        }

        private void setFileName(string param)
        {
            //通過參數(mp3文件路徑)獲取mp3信息
        }

        // 當收到第二個進程的通知時,顯示窗體  
        private void OnProgramStarted(object state, bool timeout)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new WaitOrTimerCallback(OnProgramStarted), state, timeout);
            }
            else
            {
                string param = getArgs(Application.StartupPath + "\\args.txt");
                if (param != null)
                    setFileName(param);
                this.WindowState = FormWindowState.Normal;
            }
        }

        //讀取txt文件中參數
        private string getArgs(string fileName)
        {
            if (File.Exists(fileName))
            {
                //存在
                StreamReader stream = new StreamReader(fileName, Encoding.UTF8);
                string str = stream.ReadLine();
                stream.Close();
                return str;
            }
            else
            {
                return null;
            }
        }

4.打完收工


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM