【发布时间】:2016-12-12 10:14:21
【问题描述】:
要求
我正在尝试使用 HTA 或此时的任何东西,作为单击的超链接和 WPF 应用程序 (WPF_App.exe) 之间的中间人,因为我们需要发送它在该超链接上的任何 ID (这将由另一个应用程序预先安排),以便在 WPF 应用程序中调出特定项目。
我做了什么
我将以下 HTML 保存为 test.hta,它可以接受查询字符串参数 AppID 并对其进行解析。然后可以将其发送到使用 Wscript.Shell 对象启动的 WPF 应用程序:
<html><head>
<script language="VBScript">
Sub RunProgram(param)
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "\\our_network_share\some_folder\WPF_App.exe " & param
Me.Close
End Sub
</script>
<script language ="Javascript">
function callVB () {
var param = getParameterByName('AppID');
RunProgram(param);
}
function getParameterByName(name) {
var url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
</script>
</head>
<body onload="javascript:callVB()">
</body>
</html>
需要解决的问题
即使我可以在 IE 或 Windows 资源管理器中使用 file://our_network_share/some_folder/test.hta?AppID=100 调用此 HTA 并且它会正确地将 ID 传递给 WPF 应用程序,它不会以这种方式通过超链接工作(链接必须在Outlook 使用 Ctrl+K 并使用 Ctrl+Click 进行测试,因为链接会被放入电子邮件中...... Word 也是一个很好的测试,到目前为止也失败了),我们需要能够在提供参数的同时从电子邮件链接到此 HTA 文件。这可以做到吗?而且我并没有被锁定在这个 HTA 中,只是它是迄今为止我得到的最接近的。
我尝试过的事情
我已经查看了如何pass command line arguments to an HTA,但是有没有办法将参数从超链接传递到查询字符串中的 HTA?查询字符串的原因是到目前为止,我还没有看到如何在超链接中解析 HTA 文件名和参数之间的空格,或者 WPF 名称和参数之间的空格。放入 HTML 代码 %20 不起作用,在文件链接和参数周围加上引号也不起作用。也许这只是一个语法问题,但不确定它会是什么。
【问题讨论】:
标签: wpf syntax hyperlink arguments hta