ExecImageVersion.cpp
上传用户:lqt88888
上传日期:2009-12-14
资源大小:905k
文件大小:6k
源码类别:

书籍源码

开发平台:

Visual C++

  1. /*
  2.  Written by Steve Bryndin (fishbed@tezcat.com, steveb@gvsi.com).
  3.  This code may be used in compiled form in any way you wish. This
  4.  file may be redistributed unmodified by any means PROVIDING it is 
  5.  not sold for profit without the authors written consent, and 
  6.  providing that this notice and the authors name is included. 
  7.  An email letting me know that you are using it would be 
  8.  nice as well. 
  9.  This software is provided "as is" without express or implied warranty. 
  10.  Use it at you own risk! The author accepts no liability for any damages 
  11.  to your computer or data these products may cause.
  12. */
  13. // ExecImageVersion.cpp: implementation of the CExecImageVersion class.
  14. //
  15. //////////////////////////////////////////////////////////////////////
  16. #include "stdafx.h"
  17. #include "ExecImageVersion.h"
  18. #ifdef _DEBUG
  19. #undef THIS_FILE
  20. static char THIS_FILE[]=__FILE__;
  21. #define new DEBUG_NEW
  22. #endif
  23. //////////////////////////////////////////////////////////////////////
  24. // Construction/Destruction
  25. //////////////////////////////////////////////////////////////////////
  26. CExecImageVersion::CExecImageVersion()
  27. {
  28. m_strImage = AfxGetAppName();
  29. m_strImage += ".exe";
  30. m_lpszImageName = m_strImage.GetBuffer(sizeof(m_strImage));
  31. InitVer();
  32. }
  33. CExecImageVersion::CExecImageVersion(LPTSTR lpszImageName)
  34. {
  35. m_lpszImageName = lpszImageName;
  36. InitVer();
  37. }
  38. CExecImageVersion::~CExecImageVersion()
  39. {
  40. free(m_lpBuffer);
  41. }
  42. //产品名称
  43. CString CExecImageVersion::GetProductName()
  44. {
  45. CString strProduct;
  46. //Use the version information block to obtain the product name.
  47. ::VerQueryValue(m_lpBuffer,
  48.             TEXT("\StringFileInfo\040904B0\ProductName"),
  49. &m_lpData,
  50. &m_uiDataSize);
  51. strProduct.Format("%s", m_lpData);
  52. return strProduct;
  53. }
  54. //产品版本信息
  55. CString CExecImageVersion::GetProductVersion()
  56. {
  57. CString strProductVer;
  58. //Use the version information block to obtain the product name.
  59. ::VerQueryValue(m_lpBuffer,
  60.             TEXT("\StringFileInfo\040904B0\ProductVersion"),
  61. &m_lpData,
  62. &m_uiDataSize);
  63. strProductVer.Format("%s", m_lpData);
  64. return strProductVer;
  65. }
  66. //公司名称
  67. CString CExecImageVersion::GetCompanyName()
  68. {
  69. CString strCompany;
  70. //Use the version information block to obtain the product name.
  71. ::VerQueryValue(m_lpBuffer,
  72.             TEXT("\StringFileInfo\040904B0\CompanyName"),
  73. &m_lpData,
  74. &m_uiDataSize);
  75. strCompany.Format("%s", m_lpData);
  76. return strCompany;
  77. }
  78. //合法版权
  79. CString CExecImageVersion::GetCopyright()
  80. {
  81. CString strCopy;
  82. //Use the version information block to obtain the product name.
  83. ::VerQueryValue(m_lpBuffer,
  84.             TEXT("\StringFileInfo\040904B0\LegalCopyright"),
  85. &m_lpData,
  86. &m_uiDataSize);
  87. strCopy.Format("%s", m_lpData);
  88. return strCopy;
  89. }
  90. CString CExecImageVersion::GetComments()
  91. {
  92. CString strComments;
  93. //Use the version information block to obtain the product name.
  94. ::VerQueryValue(m_lpBuffer,
  95.             TEXT("\StringFileInfo\040904B0\Comments"),
  96. &m_lpData,
  97. &m_uiDataSize);
  98. strComments.Format("%s", m_lpData);
  99. return strComments;
  100. }
  101. //文件描述
  102. CString CExecImageVersion::GetFileDescription()
  103. {
  104. CString strFileDescr;
  105. //Use the version information block to obtain the product name.
  106. ::VerQueryValue(m_lpBuffer,
  107.             TEXT("\StringFileInfo\040904B0\FileDescription"),
  108. &m_lpData,
  109. &m_uiDataSize);
  110. strFileDescr.Format("%s", m_lpData);
  111. return strFileDescr;
  112. }
  113. //版本号
  114. CString CExecImageVersion::GetFileVersion()
  115. {
  116. CString strFileVer;
  117. //Use the version information block to obtain the product name.
  118. ::VerQueryValue(m_lpBuffer,
  119.             TEXT("\StringFileInfo\040904B0\FileVersion"),
  120. &m_lpData,
  121. &m_uiDataSize);
  122. strFileVer.Format("%s", m_lpData);
  123. return strFileVer;
  124. }
  125. //内部名称
  126. CString CExecImageVersion::GetInternalName()
  127. {
  128. CString strIN;
  129. //Use the version information block to obtain the product name.
  130. ::VerQueryValue(m_lpBuffer,
  131.             TEXT("\StringFileInfo\040904B0\InternalName"),
  132. &m_lpData,
  133. &m_uiDataSize);
  134. strIN.Format("%s", m_lpData);
  135. return strIN;
  136. }
  137. CString CExecImageVersion::GetLegalTrademarks()
  138. {
  139. CString strLegTrade;
  140. //Use the version information block to obtain the product name.
  141. ::VerQueryValue(m_lpBuffer,
  142.             TEXT("\StringFileInfo\040904B0\LegalTrademarks"),
  143. &m_lpData,
  144. &m_uiDataSize);
  145. strLegTrade.Format("%s", m_lpData);
  146. return strLegTrade;
  147. }
  148. CString CExecImageVersion::GetPrivateBuild()
  149. {
  150. CString strPrivBuild;
  151. //Use the version information block to obtain the product name.
  152. ::VerQueryValue(m_lpBuffer,
  153.             TEXT("\StringFileInfo\040904B0\PrivateBuild"),
  154. &m_lpData,
  155. &m_uiDataSize);
  156. strPrivBuild.Format("%s", m_lpData);
  157. return strPrivBuild;
  158. }
  159. CString CExecImageVersion::GetSpecialBuild()
  160. {
  161. CString strSpecBuild;
  162. //Use the version information block to obtain the product name.
  163. ::VerQueryValue(m_lpBuffer,
  164.             TEXT("\StringFileInfo\040904B0\SpecialBuild"),
  165. &m_lpData,
  166. &m_uiDataSize);
  167. strSpecBuild.Format("%s", m_lpData);
  168. return strSpecBuild;
  169. }
  170. void CExecImageVersion::InitVer()
  171. {
  172. m_dwHandle = 0;
  173. m_uiDataSize = 80;
  174. m_lpData = malloc(m_uiDataSize);
  175. // Get the version information block size,
  176. // then use it to allocate a storage buffer.
  177. m_dwSize = ::GetFileVersionInfoSize(m_lpszImageName, &m_dwHandle);
  178. m_lpBuffer = malloc(m_dwSize);
  179. // Get the versioninformation block
  180. ::GetFileVersionInfo(m_lpszImageName, 0, m_dwSize, m_lpBuffer);
  181. }