標籤:
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.打完收工
c# 設定winform程式為預設開啟軟體 在運行中擷取參數