URI方案启动

时间:2014-06-27 15:18:36

标签: windows delphi uri

我已经完成了一项创建类似于callto的协议的任务:在点击链接时会自动启动已安装的应用程序。

我遵循了microsoft guide关于计划应该如何的样子。

我的计划如下:

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""

我认为这就是全部,并用

进行测试
 <a href="slican:test">test link</a>
 <a href="slican:0049325778421">test telephone link</a>

没有任何反应。 Internet Explorer问我是否要搜索可以打开内容的程序,Chrome没有回复,就好像我点击了javascript:void(0)。

如何实现这一目标?

感谢您的帮助!

3 个答案:

答案 0 :(得分:21)

当我在Windows 7上尝试时,您显示的注册对我来说非常合适。当我从slican:调用Start | Run URL时,我注册的本地应用程序代替SlicanP.exe运行正常菜单,以及从Windows资源管理器的地址栏中。所以注册工作。

请注意,Internet Explorer在较低完整性的安全上下文中运行,因此它可能无权运行本地程序。当我尝试点击指向slican:网址的HTML链接,或在地址栏中输入slican:网址时,IE无法执行本地应用(即使在提示获得许可后)。我不得不以管理员身份运行IE,然后本地应用运行得很好。

另外,您真的不应该直接创建HKEY_CLASSES_ROOT\slican密钥。请改为创建HKEY_CURRENT_USER\Software\Classes\slican(仅限当前用户)或HKEY_LOCAL_MACHINE\Software\Classes\slican(所有用户)。有关更多详细信息,请参阅MSDN:

HKEY_CLASSES_ROOT Key

Merged View of HKEY_CLASSES_ROOT

更新:由于它在Windows 7中有效,因此Microsoft可能更改了在Windows 8中注册URL方案的方式。例如,手机/商店应用使用URI激活:

URI activation (XAML)

URI activation (HTML)

The documentation说有两种注册自定义URI方案的方法:

  

Internet Explorer使用两种机制来注册新的可插入协议处理程序。第一种方法是注册URI方案名称及其关联的应用程序,以便使用该方案导航到URI的所有尝试都启动应用程序(例如,注册应用程序以处理mailto:或news:URI)。第二种方法使用Asynchronous Pluggable Protocols API,它允许您通过将URI方案映射到类来定义新协议。

你正在做第一个。尝试使用第二个。

但是,我刚刚注意到“异步可插入协议”在MSDN的“Legacy API”部分列出,它有以下注释:

  

第三方协议实施不会在使用JavaScript 的Windows应用商店应用中加载,也不会在新的Windows用户界面的Internet Explorer中加载。

因此它可能在Windows 8中起作用,也可能不起作用。

更新:我刚发现:

Guidelines for file types and URIs

  

在Windows 8中,应用程序与它们支持的文件类型之间的关系与以前版本的Windows不同。

Walkthrough: using Windows 8 Custom Protocol Activation

  

Windows 8中的文件类型和协议关联模型已更改。应用程序无法再以编程方式将自身设置为文件类型或协议的默认处理程序。相反,现在用户总是控制文件类型或协议的默认处理程序。

     

您的应用可以使用现有协议进行通信,例如mailto,或创建自定义协议。协议激活扩展允许您定义自定义协议或寄存器以处理现有协议。

还看看这个:

Setting mailto: protocol handler programmatically in Windows 8

而且:

Default Programs

答案 1 :(得分:1)

如果您转到C:\ Users \\ AppData \ Local \ Google \ Chrome \ User Data

您可以编辑本地状态文件

搜索protocol_handler

此处的语法是键值对。我通常复制两个mailto:并确保将协议设置为false。这意味着chrome会将您的新协议视为URI_Handler事件

答案 2 :(得分:0)

如果您在配置自定义URI方案时遇到问题,可以将自己的配置与现有配置进行比较。例如,&#34; HKEY_CLASSES_ROOT / mailto&#34; - 很可能你已经在你的系统中了。