码迷,mamicode.com
首页 > 其他好文 > 详细

在VC程序中获得资源文件中定义的公司名称

时间:2014-11-20 18:50:37      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   os   sp   for   文件   

今天想从自己定义的资源文件中取出公司名称, 百度了下发现全是关于从资源文件中取得版本号的办法, 还好微软的MSDN给了我答案, 为了以后方便自己和别人, 就把这个函数贴出来. 


希望百度能优化一下自己的搜索算法, 搜出来的结果几乎都是重复的, 想用能搜出来的结果用不了.百度的这一毛病也映射出了中国网民的复制粘贴的"情结"特别严重, 都是原样复制, 其中的错误都不改一下.bubuko.com,布布扣


//////////////////////////////////////////////////////////////////////////
//		返回取得的在资源文件中定义的公司名称
//
CString CDelDirAndFilesApp::_GetCompanyName()
{
	CString strResult = NULL, strVersion = NULL;
	UINT uSize = NULL;
	LPWSTR pCompany = NULL, pBuff=NULL;
	TCHAR szAppPath[MAX_PATH] = { 0 };

	struct LANGANDCODEPAGE {
		WORD wLanguage;
		WORD wCodePage;
	} *lpTranslate;

	::GetModuleFileName(NULL, szAppPath, MAX_PATH);

	uSize = GetFileVersionInfoSizeEx(FILE_VER_GET_LOCALISED, szAppPath, 0);			//获得全部资源版本信息的大小
	pBuff = new WCHAR[uSize];

	if (GetFileVersionInfoExW(FILE_VER_GET_LOCALISED, szAppPath, NULL, uSize, pBuff))		//获得全部资源版本信息
	{
		if (VerQueryValueW(pBuff, L"\\VarFileInfo\\Translation", (LPVOID*)&lpTranslate, &uSize))		//获得资源中的语言代码页
		{
			strVersion.Format(L"\\StringFileInfo\\%04x%04x\\CompanyName", lpTranslate[0].wLanguage, lpTranslate[0].wCodePage);
			if (!VerQueryValueW(pBuff, strVersion.GetBuffer(), (LPVOID*)&pCompany, &uSize))		//取得资源中的公司信息
				AfxMessageBox(L"获取公司名称失败! ");
			strResult = pCompany;
			strVersion.ReleaseBuffer();
		}
	}

	delete[]pBuff;

	return CString(strResult);
}


备注:

由于GetFileVersionInfoSizeEx与GetFileVersionInfoEx只支持Windows Vista以后的系统, 所以该函数无法在xp系统中运行, 老系统怕是只能运行GetFileVersionInfoSize与GetFileVersionInfo两个函数.


参考链接:

http://msdn.microsoft.com/en-us/library/ms647464(v=vs.85).aspx

http://baike.baidu.com/view/1295784.htm?fr=aladdin

在VC程序中获得资源文件中定义的公司名称

标签:style   blog   http   io   ar   os   sp   for   文件   

原文地址:http://blog.csdn.net/xietao1233/article/details/41316355

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!