我正在使用C#开发一个面向.NET Framework 2.0的应用程序,我需要能够找到用于打开特定文件类型的默认应用程序.
我知道,例如,如果您只想使用该应用程序打开文件,您可以使用以下内容:
System.Diagnostics.Process.Start( "C:\...\...\myfile.html" );
Run Code Online (Sandbox Code Playgroud)
在默认浏览器中打开HTML文档,或
System.Diagnostics.Process.Start( "C:\...\...\myfile.txt" );
Run Code Online (Sandbox Code Playgroud)
在默认文本编辑器中打开文本文件.
但是,我希望能够在默认文本编辑器中打开不一定具有.txt扩展名的文件(例如),因此我需要能够找到打开的默认应用程序. txt文件,这将允许我直接调用它.
我猜测有一些Win32 API,我需要P/Invoke才能做到这一点,但是对谷歌和MSDN的快速浏览并没有发现任何有趣的东西; 我确实找到了大量完全不相关的页面,但没有像我在寻找的那样.
我正在为metro应用程序进行自动化测试,我发现代码可以完成我需要的很多东西,但是它是用C++编写的:http://blogs.msdn.com/b/windowsappdev/archive/2012/09/04/自动化最测试-的-窗口8 apps.aspx
我的问题是,如何在C#中使用IApplicationActivationManager :: ActivateApplication,因为我不懂C++?该方法的详细信息可在此处找到:http://msdn.microsoft.com/en-us/library/windows/desktop/hh706903(v = vs.85).aspx
这是我从Shobjidl.idl中提取的代码:
cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(ACTIVATEOPTIONS)")
// IApplicationActivationManger is used to activate an immersive application identified by its Application User Model Id.
//
// Developers who are interested in using the Application Activation Manager do not need to implement the following
// interface. An implementation is provided through the CoCreatable Object with CLSID_ApplicationActivationManager.
[
object,
uuid(2e941141-7f97-4756-ba1d-9decde894a3d),
pointer_default(unique)
]
interface IApplicationActivationManager : IUnknown
{
// Activates the specified immersive application for the …Run Code Online (Sandbox Code Playgroud) 我已经被赋予了一个创建类似于callto的协议的任务:在点击链接时会自动启动已安装的应用程序.
我按照微软指南查看了一个方案应该是什么样子.
我的计划如下:
HKEY_CLASSES_ROOT
slican
URL Protocol = ""
DefaultIcon (Default) = "C:\Users\Okabe\Desktop\slican\SlicanP.exe,1"
shell
open
command (Default) = "C:\Users\Okabe\Desktop\slican\SlicanP.exe" "%1""
Run Code Online (Sandbox Code Playgroud)
我认为这就是全部并经过测试
<a href="slican:test">test link</a>
<a href="slican:0049325778421">test telephone link</a>
Run Code Online (Sandbox Code Playgroud)
没有任何反应.Internet Explorer问我是否要搜索可以打开内容的程序,Chrome没有回复,就像我点击了javascript:void(0).
如何让它工作?
谢谢您的帮助!