微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过文件关联执行已启动的应用程序的事件?

玩了一个新的Windows窗体项目后,我发现,当您将文件types与Windows中的可执行文件相关联时,您可以使用args[0]从static void Main(string[] args)

如果应用程序已经打开,双击文件时是否可以在应用程序上启动事件? (显然Main(string[] args)不会被触发)。

具有行为的应用程序示例我试图复制:

用户打开GIMP(在Windows中)

用户打开资源pipe理器,并右键点击.png文件

用户select用GIMP打开

GIMP不是创build一个新的GIMP应用程序实例,而是在已经打开的GIMP实例内的一个新窗口中打开图片

在这种情况下,GIMP采用多个应用程序来接受文件关联“打开”的文件? 还是有可能做到这一点与一个单一的应用程序“实例”。

特定networking接口IPv4可用性 – 无连接,本地,Internet

找不到(?)资源,同时将C ++ .net代码从MSVS2005移植到MSVS2010

如何以编程方式编辑特定用户的registry项?

在Windows中检测文件copY”操作

如何从驱动器的全名获取驱动器号

我有这个麻烦,因为我的大多数search往往导致我作为一个Windows用户文件关联(即“如何将.xls文件与Excel”文章)。

分布式列表中的冲突解决

如何获得一个图片框中的图像的当前大小

我可以在桌面窗口上使用DPWS吗?

无法生成一个临时类(结果= 1)任何想法?

监视Windows窗体应用程序

雷蒙德当然是对的,但是如果你正在寻求帮助选择(1)的实施,你应该看看什么是创建一个实例应用程序的正确方法? 和.NET 4单一应用程序实例,并切换到同一应用程序的其他实例

你会注意到检测应用程序非常简单(使用互斥锁)。 带上其他应用程序并发送一个文件名可能会更具挑战性。

在以前的相关问题的答案中提出了三个基本的解决方

使用PostMessage发送消息给第一个实例。 这使用HWND_broADCAST ,可能会产生HWND_broADCAST结果。

使用Microsoft.VisualBasic.applicationservices.ApplicationBase当然,对VisualBasic的引用给了一些C#开发人员的意图。

使用依赖Windows名称的FindWindow 。

另外值得注意的是,如果你想要现有的应用程序在前面,你需要特别小心,因为设置前景只能被放弃,而不会被拿走。 请参阅前台激活权限就像爱:你不能偷它,它必须给你 , AllowSetForegroundWindow和SetForegroundWindow

有各种各样的选择,但没有一个是免费的。

您的程序的Main()可以检测到有另一个副本已经在运行,并通过您确定的某种方式将文件名称交给正在运行的副本。

您的程序可以注册为DDE服务器,并请求通过DDE执行后续的打开。 这是一个20世纪90年代的老式技术,通常不推荐用于新的程序。

您可以为您的应用程序注册一个自定义放置目标,并让放置目标将文件名称交给正在运行的副本。 这种机制采用外壳扩展的形式,因此由于CLR注入问题而不适合C#。

考虑到你的限制,选项(1)似乎是最好的选择。

微软为Visual Basic .Net创建了这个功能,它也可以被C#使用。

在C#中看到一个简单的例子,下面的文章

http://www.openwinforms.com/single_instance_application.html

这种方法最适合我: 强制单实例WPF应用程序 。 特别是,它的传递参数的解决方案也适用于只有通知图标的应用程序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐