【发布时间】:2015-05-18 18:24:08
【问题描述】:
我使用 Visual Studio 2012 Windows Form C# 创建了一个音乐播放器。现在我希望用户能够使用我的播放器在 Windows 资源管理器中播放歌曲,例如其他播放器(Windows Media Player、Winamp 等)。 我已经找到了文件关联的方法!
但我需要阻止我的应用程序运行多个实例(因为 WMP 和...不要)并且我也想获取歌曲路径以将它们发送到我的应用程序(已经开始)。
例如,用户在 Windows 资源管理器的目录中选择 3 首歌曲并按 Enter,这样我的应用程序 / 并执行我的 AddFiles 功能(将支持的文件添加到播放列表和...)
我尝试了 mutex,它解决了第一部分(只是单个实例),但无法从中获取参数!
我也尝试了this,但没有机会 :( 它出错了!
** 我已经尝试过What is the correct way to create a single instance application?“Matt Davis”的答案,它使我的应用程序仅是单个实例,并且放在前面非常棒,但没有向我的运行进程发送参数,所以它无法解决我的问题问题!
任何帮助都会提前:)
更新: 我不明白,虽然我的问题还没有解决,但为什么专家会关闭这个问题!? :| :/
更新 2(找到解决方案):
好的,我终于找到了解决方案:)
此链接帮助我通过单击上下文菜单项在资源管理器中获取所选文件的路径: .NET Shell Extensions - Shell Context Menus
真的很容易:) 希望这对其他人也有帮助!
【问题讨论】:
-
正如我所说,我已经尝试过那篇文章!它完成了我想要的一半工作!但不能解决参数部分(文件路径)
-
或者我没有正确使用它!
-
我试过“Matt Davis”回答它带到前窗的部分很棒我喜欢!但正如我所说,我无法通过它获得所有选定的文件路径! :(
-
“也许我没有正确使用它”——Matt Davis 的回答不支持参数传递。但是来自同一个问题的这个问题:stackoverflow.com/a/19326/3538012 还有很多其他方法可以处理参数传递,但您必须实现 some 机制。您的原始实例的
Main()方法不会再次被调用,因此一旦程序启动,将命令行参数传递给程序需要您付出额外的努力。 -
谢谢@PeterDuniho 我也要试试这个答案!但也许不是现在我真的很困&醒来后想睡觉试试看!希望它能解决我的问题
标签: c# arguments single-instance