c # — Microsoft HTML Help — Получить URL страницы темы из идентификатора темы

В настоящее время мы используем справку HTML для отображения файлов справки CHM в нашем программном обеспечении. Однако мы хотели бы изменить способ открытия справки, чтобы открыть ее в нашем собственном окне со встроенным браузером.

Достичь этого, напрямую запросив страницы тем для открытия с URL-адресами, достаточно просто, однако мы хотели бы сохранить использование идентификаторов тем, чтобы редакционная группа могла свободно реструктурировать и переименовывать справку по своему усмотрению, только манипулируя картами и псевдонимами.

Я копался в течение некоторого времени и не мог найти (достаточно дешевый) способ заставить URL открываться из идентификатора темы, чтобы я мог запросить URL, чтобы открыть в пользовательском окне. Я пропускаю трюк, или есть какие-нибудь библиотеки, которые могли бы облегчить это?

0

Решение

AFAIK вам нужен действительный URL с именем файла темы, например, «Garden / garden.htm» при использовании элемента управления веб-браузера. Поэтому другие решения очень сложны, и я думаю, что это невозможно с контролем веб-браузера.

Вы знаете, что можете сделать жестко закодированный звонок, например, с помощью следующий код:

    public static string GetChmUrl(string fileName, string page)
{
StringBuilder url = new StringBuilder();
url.AppendFormat("mk:@MSITStore:{0}::", fileName);
if (page.IndexOf('/') != 0) url.Append('/');
url.Append(page);
return url.ToString();
}

а также

   webBrowser1.Navigate(new Uri(GetChmUrl(Application.StartupPath + sHTMLHelpFileName_ShowWithoutAutoSync, "Garden/garden.htm")));

Для отображения тем HTMLHelp по TopicId без полнофункционального окна справки вы можете создать специальный тип окна для окна средства просмотра HTMLHelp. ОК — это скорее вспомогательная авторская работа по подготовке звонка из вашего приложения. Это возможно, если компилировать CHM особым образом и уменьшить его до панели содержимого, как правило, с правой стороны средства просмотра HTMLHelp.

Вы можете вызвать контент по TopicId, и результат будет показан на снимке:

    private void btnTopicId_Click(object sender, EventArgs e)
{
Help.ShowHelp(this.btnOpenHelpShowTopic, helpProvider1.HelpNamespace, HelpNavigator.TopicId, @"10000");
}

введите описание изображения здесь

Много лет назад для приложения была так называемая «встроенная справка», как вы можете видеть на снимке. Это было сделано с помощью вызова API HTMLHelp. У меня есть старый код Delphi, но не переведен на .net. HTMLHelp используется уже почти 20 лет, и сегодня все чаще используется веб-справка. Так что вы должны подумать и решить.

введите описание изображения здесь

Вы должны использовать маршаллинг для вызова неуправляемого API справки HTML из приложения Visual C #. Использовать HTMLHelp API в .net нелегко. Чтобы попробовать, вы можете начать с примера загрузки (в конце статьи) из:
https://support.microsoft.com/en-us/kb/317406

Я тоже приложил снимок:

введите описание изображения здесь

НТН.

2

Другие решения