21xrx.com
2025-04-11 11:22:33 Friday
文章检索 我的文章 写文章
如何在C++中修改EXE文件的详细信息
2023-07-14 20:30:15 深夜i     28     0
C++ 修改 EXE文件 详细信息 调试信息

C++是一门强大的编程语言,常用于开发各种应用程序。在开发应用程序时,仅仅编写代码是远远不够的,还需要添加应用程序的详细信息,如版本号、版权信息、描述等。在Windows平台下,这些信息是存储在EXE文件中的。而如果需要修改EXE文件的详细信息,则需要使用C++中的相关函数进行操作。

在C++中,修改EXE文件的详细信息可以通过以下方式进行:

1.使用VersionInfo结构体

VersionInfo结构体可以用于读取和修改EXE文件中的版本信息。它包含了文件版本号、产品名称、公司名称、版权信息、文件说明等相关信息。使用VersionInfo结构体需要先载入EXE文件,然后使用相关函数读取和修改其中的信息。以下是一段示例代码:

#include <windows.h>
#include <iostream>
#pragma comment(lib, "Version.lib")
using namespace std;
void ModifyEXEInfo()
{
  // 载入EXE文件
  LPCWSTR lpszFile = L"test.exe";
  DWORD dwHandle = 0;
  DWORD dwSize = GetFileVersionInfoSize(lpszFile, &dwHandle);
  if (dwSize == 0)
    cout << "读取EXE文件失败" << endl;
    return;
  
  LPBYTE lpData = new BYTE[dwSize];
  if (!GetFileVersionInfo(lpszFile, 0, dwSize, lpData))
    cout << "读取版本信息失败" << endl;
    return;
  
  // 获取VersionInfo结构体指针
  VS_FIXEDFILEINFO* pFileInfo = NULL;
  UINT nLen = 0;
  if (!VerQueryValue(lpData, L"\\", (LPVOID*)&pFileInfo, &nLen))
    cout << "获取VersionInfo结构体失败" << endl;
    return;
  
  // 修改注释信息
  LPWSTR lpszComments;
  UINT nCommentsLen;
  if (VerQueryValue(lpData, L"\\StringFileInfo\\040904b0\\Comments", (LPVOID*)&lpszComments, &nCommentsLen))
  {
    wcscpy_s(lpszComments, nCommentsLen, L"这是一段修改后的注释信息");
  }
  // 保存修改后的EXE文件
  if (!VerQueryValue(lpData, L"\\", (LPVOID*)&pFileInfo, &nLen))
    cout << "获取VersionInfo结构体失败" << endl;
    return;
  
  if (!VerQueryValue(lpData, L"\\StringFileInfo\\040904b0\\Comments", (LPVOID*)&lpszComments, &nCommentsLen))
  
    cout << "获取注释信息失败" << endl;
    return;
  
  DWORD dwHandleOut;
  if (!VerInstallFile(dwHandle, lpszFile, L"test1.exe", NULL, NULL, NULL, &dwHandleOut))
    cout << "保存文件失败" << endl;
    return;
  
  // 释放资源
  delete[] lpData;
  cout << "修改EXE文件的注释信息成功!" << endl;
}

上述代码中,首先通过GetFileVersionInfoSize函数获取EXE文件的版本信息大小,然后使用GetFileVersionInfo函数读取EXE文件的版本信息。接下来使用VerQueryValue函数获取VersionInfo结构体指针,其中“\”表示顶级块,即整个文件。最后使用VerInstallFile函数保存修改后的EXE文件,将其保存为test1.exe。

2.使用Resource Hacker实现图形化操作

除了使用C++中的函数进行操作外,也可以使用Resource Hacker这样的工具进行图形化操作,实现修改EXE文件的详细信息。以下是使用Resource Hacker的步骤:

1)下载Resource Hacker安装包,安装到本地电脑上。

2)打开Resource Hacker,选择要修改的EXE文件,点击“打开”按钮。

3)选择“Version Info”选项卡,在此界面中可以修改EXE文件的各种详细信息。

4)修改完毕后,点击“文件”菜单,选择“保存”。

通过以上两种方式,我们可以轻松地实现对EXE文件的详细信息进行修改。使用C++中的函数需要稍微编写一些代码,但可控性更高;而使用Resource Hacker则相对简单,但控制权可能会受到部分限制。若是需要大规模修改EXE文件的详细信息,则建议使用C++中的相关函数进行修改。

  
  

评论区

请求出错了