在Windows 7中,如果我运行像Minesweeper或Mahjong Titans这样的游戏,然后从游戏菜单中选择“帮助”,我会得到一个独立的帮助窗口,我可以从中导航到其他主题(可能是所有帮助文件,来自OS)。请注意,我始终选择“离线帮助”,而不是“在线帮助”。
我想从C#中的按钮单击事件中打开这些文件。问题是,我不知道这些文件的存储位置,甚至是什么扩展名。
当我打开独立的帮助窗口时,任务管理器将该进程列为“HelpPane.exe”,它位于C:\ Windows中。如果我尝试双击HelpPane.exe,则不会发生任何事情。
如果我右键单击帮助窗口并选择“查看源代码”,我会发现它基本上是一个网页。一个例子< body>标签是:
<BODY helptype="toc" helpurl="mshelp://windows/?tocid=ebd9c148-6e8d-4359-83d5-f4b700ab2f8f" helpsource="local" Lang="en-US">
我可以从C#程序访问mshelp:// windows / ...吗?还是有另一种方法可以做我想要的事情吗?
答案 0 :(得分:5)
HelpPane.exe是一个进程外COM服务器。您可以激活它并使其在您自己的C#程序中轻松显示内容。要开始使用,请使用Project + Add Reference并选择c:\ windows \ helppane.exe。这将从嵌入在helppane.exe中的COM类型库创建互操作库,该类型库使用“APClientHelpPane”命名空间生成。
显示Windows帮助主题内容文件的示例程序:
using System;
using WinHelp = APClientHelpPane;
class Program {
static void Main(string[] args) {
var obj = new WinHelp.HxHelpPaneServer();
string docpath = @"C:\Windows\Help\Windows\ContentStore\en-US\windowsclient.mshc";
obj.DisplayContents(docpath);
}
}
在美国版Windows 8.1上测试过。不知道你在Windows 7上有多少运气,我怀疑你必须修改.mshc文件的路径。这当然应该关注你。 Microsoft也没有义务将此工作保留在未来的Windows版本上,此自动化界面未记录在案。对各种Windows程序的主题名称进行逆向工程并不是那么明显,我怀疑你可以通过检查显示的内容来使用你找到的mshelp:// URL,但是你在Windows版本中的稳定性是你需要的找出困难的方法。
Microsoft Help Viewer SDK应该引起您的兴趣。 this blog post中提到了MSHC创作工具。