Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Програмный вызов утилиты hh.exe


Автор: danika 20.6.2011, 22:33
Здравствуйте.
 В папке проекта,имеется скомпилированный файл справки SmViewHelp.chm и HTML-файлы содержания.
 Запускаю из своей программы файл справки:
   

Код

void __fastcall TMainForm::HelpClick(TObject *Sender)
{
 ShowMessage("Current directory = " + GetCurrentDir());
 WinExec ("hh.exe SmViewHelp.chm ", SW_SHOWNORMAL);
}


Происходит следующее:
 По созданию главного окна своей программы,в режиме временного бездействия утилита hh.exe
 запускается без проблем,вместе с содержимым.
 Как только запускаются некие процессы при работе  программы(загрузка некоторого файла,создание списка и т.д)утилита помощи отказывается запускаться.Пишет "Не могу открыть файл SmViewHelp.chm".
 Причём отладочная строка 
   

Код

ShowMessage("Current directory = " + GetCurrentDir());

показывает что меняется путь до текущей папки.
Подскажите как это исправить.
PS
Пробовал явно указывать путь.

Код

AnsiString Dir  = ExtractFilePath(Application->ExeName) + " SmViewHelp.chm";
ShowMessage(" Current directory:"+ Dir);
ShellExecute(Handle,"open",Dir.c_str(),NULL,NULL,SW_RESTORE);
DWORD GetLastError(VOID);

Вообще ничего не происходит,код ошибки не возвращает,хотя путь показывает верный.

Автор: Dem_max 21.6.2011, 03:44
может быть так ?
Код

ShellExecute(hwnd, "open", "C:\\Program Files\\MyProgramm\\Help.chm", 0, 0, SW_SHOW);

Автор: borisbn 21.6.2011, 06:13
Цитата(danika @  20.6.2011,  22:33 Найти цитируемый пост)
AnsiString Dir  = ExtractFilePath(Application->ExeName) + " SmViewHelp.chm";

Пробел перед SmViewHelp.chm лишний
Код

AnsiString Dir  = ExtractFilePath(Application->ExeName) + "\\SmViewHelp.chm";
ShellExecute( Handle, "open", Dir.c_str(), 0, 0, SW_SHOW );

Автор: danika 21.6.2011, 12:02
Цитата

Пробел перед SmViewHelp.chm лишний


Точно,огромное спасибо,заработало.
А я голову сломал,с консоли полез запускать.

Автор: volatile 22.6.2011, 02:02
Вообще для правильного запуска chm  в winapi есть специальная функция.

#include <HtmlHelp.h>
...
HtmlHelp(...) ;

Там можно указать топик, который надо открыть.
+ при закрытии программы, хелп тоже закроется, а не будет висеть.
+ еще некоторые плюшки.

поищите по ключевой фразе "HTML Help API Function"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)