1.右键→打开方式→选择默认程序→选择winform程序

2.修改Program.cs

判断注册的事件是否存在,如果不存在则运行实例,并把参数传入MainForm里,如果存在则把参数写到txt文件中,然后发事件,退出

  1. using Microsoft.Win32;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Threading;
  6. using System.Windows.Forms;
  7.  
  8. namespace SimpleMusicPlayer
  9. {
  10. static class Program
  11. {
  12. public static EventWaitHandle ProgramStarted;
  13.  
  14. /// <summary>
  15. /// 应用程序的主入口点。
  16. /// </summary>
  17. [STAThread]
  18. static void Main(string[] args)
  19. {
  20. // 尝试创建一个命名事件
  21. bool createNew;
  22. ProgramStarted = new EventWaitHandle(false, EventResetMode.AutoReset, "MyStartEvent", out createNew);
  23.  
  24. // 如果该命名事件已经存在(存在有前一个运行实例),则发事件通知并退出
  25. if (!createNew)
  26. {
  27. // 先写一些数据到txt中,以便传递给前一个运行实例
  28. //Registry.SetValue(@"HKEY_CURRENT_USER\Software\MyMusic", "", string.Join(",", args));
  29. string fileName = Application.StartupPath + "\\args.txt";
  30. StreamWriter sw = new StreamWriter(fileName, false);
  31. sw.WriteLine(args[]);//开始写入值
  32. sw.Close();
  33.  
  34. ProgramStarted.Set();
  35. return;
  36. }
  37. else
  38. {
  39. Application.EnableVisualStyles();
  40. Application.SetCompatibleTextRenderingDefault(false);
  41. Application.Run(new MainForm(args.Length==?null:args[]));
  42. }
  43.  
  44. }
  45.  
  46. }
  47. }

3.MainForm.cs

当收到第二个进程的通知时,读取txt中参数(MP3路径),显示窗体

  1.      public MainForm(string param)
  2. {
  3. InitializeComponent();
  4.  
  5. if (param != null)
  6. setFileName(param);
  7.  
  8. ThreadPool.RegisterWaitForSingleObject(Program.ProgramStarted, OnProgramStarted, null, -, false);
  9. }
  10.  
  11. private void setFileName(string param)
  12. {
  13. //通过参数(mp3文件路径)获取mp3信息
  14. }
  15.  
  16. // 当收到第二个进程的通知时,显示窗体
  17. private void OnProgramStarted(object state, bool timeout)
  18. {
  19. if (this.InvokeRequired)
  20. {
  21. this.Invoke(new WaitOrTimerCallback(OnProgramStarted), state, timeout);
  22. }
  23. else
  24. {
  25. string param = getArgs(Application.StartupPath + "\\args.txt");
  26. if (param != null)
  27. setFileName(param);
  28. this.WindowState = FormWindowState.Normal;
  29. }
  30. }
  31.  
  32. //读取txt文件中参数
  33. private string getArgs(string fileName)
  34. {
  35. if (File.Exists(fileName))
  36. {
  37. //存在
  38. StreamReader stream = new StreamReader(fileName, Encoding.UTF8);
  39. string str = stream.ReadLine();
  40. stream.Close();
  41. return str;
  42. }
  43. else
  44. {
  45. return null;
  46. }
  47. }

4.打完收工

c# 设置winform程序为默认打开软件 在运行中获取参数的更多相关文章

  1. window 下Notepad++设置为文本文件的默认打开程序失败

    1.右键Notepad++的可执行程序,选择"属性"  -- "兼容性" , 设置Notepad++以管理员的身份运行 2.打开Notepad++ ," ...

  2. 不能设置sublime text作为默认打开程序

    删除 HKEY_CURRENT_USER\Software\Classes\Applications下的Sublime_Text.exe项.你就发现可以设置为默认打开方式了

  3. Windows中与系统关联自己开发的程序(默认打开方式、图标、右击菜单等)

    1. 默认打开方式 1.1. 代码支持 在Windows下,某个特定后缀名类型的文件,如果要双击时默认用某个程序(比如自己开发的WinForm程序)打开,代码中首先肯定要支持直接根据这个文件进行下一步 ...

  4. 程序ajax请求公共组件app-jquery-http.js中url参数部分的项目应用

    结合微信登录以及微信支付的案例:= =||| (案例比较奇葩复杂) 简述项目流程: 1.获取用于公众号支付的openid(公众平台):在微信内置浏览器中打开网页链接,刚进入页面就通过微信公众平台获取该 ...

  5. h5与小程序互相跳转,传参和获取参数

    1.h5跳转到小程序 首先引入js文件 <script src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js">< ...

  6. C# winform应用程序仅能打开一个进程运行

    判断程序是否已经运行,使程序只能运行一个实例: 方法1: //这种检测进程的名的方法,并不绝对有效.因为打开第一个实例后,将运行文件改名后,还是可以运行第二个实例. private static bo ...

  7. winform程序限制只能打开一个进程

      有很多方案,先来最傻瓜式的  : static class Program     {         /// <summary>         /// 应用程序的主入口点.     ...

  8. 设置Android程序的默认安装位置

    修改 AndroidManifest.xml 文件: <manifest xmlns:android="http://schemas.android.com/apk/res/andro ...

  9. 设置Qt程序在Windows开机后自动运行

    (转自:http://blog.csdn.net/weiren2006/article/details/7443362) 主要原理是修改Windows的注册表来实现的,Qt的QSettings提供了访 ...

随机推荐

  1. HTML5的Server-Sent Events介绍

    body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; }       HTML5有一个Server-Sent Events(S ...

  2. Android活动启动模式

    在android中,android活动是以栈的方式进行存储,在栈中的活动不断被重新激活至前台和不断被终止也不断被排序.因此对于栈中的活动管理也是一个比较麻烦的事情. android给我们提供了两类活动 ...

  3. Lucene.net站内搜索—5、搜索引擎第一版实现

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  4. [翻译]Autofac 解析服务

    注册组件以后,通过容器或 ILifetimeScope 的 Resolve 方法解析服务: var builder = new ContainerBuilder(); builder.Register ...

  5. ecshop适应PHP7的修改

    说实话,ecshop这个系统,到目前也没见怎么推出新版本,如果是新项目,不太建议使用它.不过,因为我一直以来都在使用中,所以不得不更改让其适应PHP新版本.现在PHP 7已经出发行版了,所以更改来继续 ...

  6. sDashboard:简单的,轻量级的 jQuery 仪表板插件

    sDashboard 是一个轻量的仪表板 jQuery 插件,转换一个对象数组到仪表板.数组中的每个对象将被呈现为一个仪表板组件,可以通过左右拖 ​动重新排列. sDashboards 内置渲染 Da ...

  7. 20款免费的 PSD 网站模板【免费下载】

    如果你的新项目预算很低,那么免费网站模板对你来说是一个很好的解决方案.有很多的预先设计的网站模板 PSD 素材可以使用和自由定制.在这里,你会发现可供下载的超级棒的免费网站模板.你可以使用它们来创建自 ...

  8. go语言常用函数:cap

    cap()函数返回的是数组切片分配的空间大小.//http://www.cnblogs.com/osfipin/. package main import "fmt" func m ...

  9. Basic Virus's Infection & Variation [Python]

    Learn from here Initial #!/usr/bin/python2.7 #MAGIC_STRING_skd83749872 import os import __main__ imp ...

  10. DevExpress VCL 13.1.4支持Delphi /C++Builder XE5

    DevExpress VCL 13.1.4支持Delphi /C++Builder XE5 重大变化 ExpressLibrary dxHalfOfPi常数声明已经从cxGeometry单元移到了cx ...