如何通过HTML访问程序的资源时获取可执行文件名?

时间:2010-11-04 12:28:51

标签: c++ html mfc resources

我的MFC程序中有一个HtmlView,我以HTML格式显示一些数据。 HTML使用了可执行文件中包含的一些资源,因此,一般来说,我的HTML文件包含以下内容:

<script language="javascript" type="text/javascript" src="res://MyProgram.exe/JS/IDR_JQUERY"></script>

<img src="res://MyProgram.exe/JPG/PROGRAMLOGO"/>

问题是,如果用户将程序名称从MyProgram.exe更改为其他名称,则HTML将无法正常运行。

我正在使用CHtmlView::LoadFromResource加载HTML文件。我已经能够使用此函数在运行时更改主体部分的HTML:

BOOL DHtmlView::PutBodyContent(LPSTR lpstrContent)
{
 //check if HtmlDocument initialized
 if( m_pHtmlDoc2)
 {
  HRESULT hr = S_OK;
  IHTMLElement *pBodyElement;
  //get body element
  hr=m_pHtmlDoc2->get_body( &pBodyElement);
  //put content to body element
  _bstr_t pbBody( lpstrContent);
  hr=pBodyElement->put_innerHTML( pbBody);

  if( hr==S_FALSE) return FALSE;
  else return TRUE;
 }
 else return FALSE;
}

但我似乎找不到与头部相同的方法。

你有任何提示吗?

2 个答案:

答案 0 :(得分:1)

使用API​​调用::GetModuleFileName()获取可执行文件的名称并删除路径。

使用某种转义序列(如“$(FileName)”)引用HTML中可执行文件的名称:

<img src="res://$(FileName)/JPG/PROGRAMLOGO"/>

在设置HTML文档的内容之前,将所有转义序列的出现替换为GetModuleFileName()API调用的结果。

答案 1 :(得分:0)

经过一段时间干预IHTMLElement后,我找到了一种更简单的方法。由于我的HTML文件本身就在程序资源中,我发现我可以做相对引用。所以我的例子转向:

<script language="javascript" type="text/javascript" src="../JS/IDR_JQUERY"></script>

<img src="../JPG/PROGRAMLOGO"/>