如何从网页启动/传递值到 Windows C# 应用程序? (似乎有可能与 iTunes 的歌曲链接)?

Posted

技术标签:

【中文标题】如何从网页启动/传递值到 Windows C# 应用程序? (似乎有可能与 iTunes 的歌曲链接)?【英文标题】:how can I launch/pass a value to a Windows C# application from a web page? (it seems possible with song links to iTunes)? 【发布时间】:2009-12-29 23:41:37 【问题描述】:

我正在组装一个 C# winforms 应用程序,如果能够让某人单击网页链接,自动最大化我的 c# 应用程序并将一些数据传递给它,那就太好了。就像我看到一些网页有一个歌曲链接,它会自动打开 iTunes,然后在 iTunes 中搜索您传递的歌曲详细信息。

Q1 - 如何在 html/javascript 中做到这一点?

Q2 - 这种方法是否仅适用于某些浏览器?

Q3 - 这只适用于 Windows 吗? (我自己只需要它用于 Windows)

谢谢

【问题讨论】:

【参考方案1】:

您可以注册一个 URL 协议处理程序 (see),它允许您指定一个唯一的 URL 协议,并且您可以在网页中创建可点击的链接,这将产生一个传递完整 URL 的新应用程序。不过要小心,因为此机制已被错误实施多次,可能会使您受到利用。

如果您尝试使用这些奇怪的 URL 之一,浏览器通常会警告您。这仅适用于 Windows(但在其他操作系统上也有替代方案)。

【讨论】:

谢谢 - 所以我想这个想法是你构建你的 C# winforms 安装来执行这个作为安装的一部分? (即注册协议处理程序) 这种方法实际上是否仅在尚未打开 winforms 应用程序时才有效?也就是已经打开了怎么办? 您需要实现某种形式的单实例应用程序支持,因此启动新实例实际上会导致原始实例激活。网上有很多例子,在 SO 上也经常被问到。【参考方案2】:

您必须将新文件类型与您的 C# 应用程序相关联。网页可以通过下载来“启动”这样的文件。

我相信您必须通过将参数写入要下载的文件来传递参数。


确实会有“运行或保存”提示,但除此之外,我认为这是最简单的方法,也是最容易维护的方法。

【讨论】:

【参考方案3】:

我的第一反应是,您必须首先创建某种浏览器插件,作为 javascript 和 C# 应用程序之间的中间人。这是因为网站 javascript 和其他代码在有限的安全上下文中运行,无法访问特权资源,例如其他应用程序、命名管道、tcp 端口等。

【讨论】:

你看到泰伦的回应了吗?这听起来可能更简单? 是的,而且更通用,即独立于浏览器。

以上是关于如何从网页启动/传递值到 Windows C# 应用程序? (似乎有可能与 iTunes 的歌曲链接)?的主要内容,如果未能解决你的问题,请参考以下文章

如何从网格获取值到c#控制器

如何从非托管 C++ 代码获取结构化列表值到 C#?

WPF学习笔记之如何传递第一个登录界面的值到下一个页面显示:动画系列之

如何从JavaScript传递值到asp页面?

如何从Request.Properties [“MS_QueryNameValuePairs”]解析json键值到对象C# [重复]

如何从某个网页复制所有文本并将其保存到记事本C#