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.打完收工

时间: 2024-10-12 08:07:00

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

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

(转自:http://blog.csdn.net/weiren2006/article/details/7443362) 让软件在系统启动时自动运行,可通过修改注册表实现. 在\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run中添加需启动的程序路径,代码如下: voidautoStart(boolflag){//写入注册表,开机自启动HKEYhKey;//找到系统的启动项LPCTSTRlpRun=(wchar_t*)

给程序添加默认打开方式 不成功

昨天装了sublime2后把一些文本文件默认打开方式设置为sublime2,然后又装了一个sublime3,把sublime2给卸载了. 接下来那些被设置过打开方式的文件,打开的时候就出错了.然后试图将sublime3设置为默认打开方式,这时怎么设置都设不上, 重启电脑还是不行,后来发现注册表里 HKEY_CLASSES_ROOT\Applications\sublime_txt.exe\shell\open\command 是这样的 "E:\Program Files\Sublime Text

关于32位程序在64位系统下运行中需要注意的重定向问题(有图,很清楚)

0x00 前言 最近学习了[email protected]的文章<Persistence Architecture Matters>,恰巧解决了我之前遇到过的一个问题,理清了文件和注册表重定向中需要注意的细节 大家在学习的过程中难免也会碰到,所以在此分享一下. <Persistence Architecture Matters>的链接:https://labs.mwrinfosecurity.com/blog/persistence-architecture-matters/ 0

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

结合微信登录以及微信支付的案例:= =||| (案例比较奇葩复杂) 简述项目流程: 1.获取用于公众号支付的openid(公众平台):在微信内置浏览器中打开网页链接,刚进入页面就通过微信公众平台获取该微信用户的code,拿到code传给后台,换取用户的openid. 2.微信登录(开放平台):微信登录通过微信开放平台,由于第一步公众平台拿到的code会混淆开放平台的code,导致用户使用微信登录失败,就需要使用该插件将url参数重置. 3.微信支付(公众平台):像后台传输步骤一获取的openid

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

今天有幸被召回母校给即将毕业的学弟学妹们讲我这两年的工作史,看了下母校没啥特别的变化,就是寝室都安了空调,学妹们都非常漂亮而已..好了不扯蛋了,说下今天的主题吧.这些天我在深度定制语法高亮功能的同时发现了博客园提供的一些有意思的函数,甚至有几个博客园都没用到,我也不知道怎么才能触发那些功能..打开这个js就可以看到很多好用的东西了,虽然写的不怎么样,但是至少有这些功能. ps: 推荐安装一个代码格式化的插件,否则一坨看着蛋疼.比如第一个就是 log,方便调试. http://www.klxsw.

小程序全局状态管理,在页面中获取globalData和使用globalSetData

GitHub: https://github.com/WozHuang/mp-extend 主要目标 微信小程序官方没有提供类似vuex.redux全局状态管理的解决方案,但是在一个完整的项目中各组件的数据一致性是必须要保证,因此需要开发一个能够实现小程序全局状态管理的解决方案. 设计思路 参考omix后,我觉得其中实现全局状态管理的方式与小程序本身的写法有点差异 小程序使用setData,omix直接使用封装的this.store修改 小程序官方的示例中以app.globalData作为全局属

win10设置默认打开方式

layout: post title: win10设置默认打开方式 date: 2018-12-29 9:10:50 group: tags: win10设置默认打开方式 我们有的软件只显示了一个文件,打开会提示你选择一个软件来打开,每次都选择的话就很麻烦.我们就要配置一下这些文件的默认打开软件. 解决方式 右键这个文件,选择属性 打开后选择红色圈住的地方 就会打开软件的列表,有一些固定的推荐软件,也可以自己去找软件的运行方式来打开. 选择这在电脑上查找其他应用,选择一个软件的exe文件点击打开

Mac 使用命令打开软件

Mac 中使用命令打开软件 在Mac 中各种快捷键很方便,如何使用命令打开一款关键呢? 这里以用Mou 打开markdown 文件为例. 1.mac 中可以使用open 命令打开一个文件 open a.txt // 使用默认方式打开a.txt open -a a.txt // 选择使用何种方式打开 a.txt 如果使用Mou 打开 ,就需要把Mou 的绝对路径放上去 ,这样 open -a /Application/Mou.app a.txt // 使用Mou 打开 a.txt 每次这样打开,有

如何在Silverlight应用程序中获取ASP.NET页面参数

asp.net Silverlight应用程序中获取载体aspx页面参数 有时候SL应用中需要使用由aspx页面中传递过来的参数值,此时通常有两种方法获取 1. 使用InitParameters属性,动态设置传递参数 . 2. 在SL工程中使用HtmlPage类来直接获取页面参数. 如下面的项目结构,我们会在Default.aspx页面中需要传递两个值到SilverlightTestPage.aspx页面,并且需要在SilverlightTestPage.aspx页面所宿主的Silverligh