21xrx.com
2024-09-19 23:53:24 Thursday
登录
文章检索 我的文章 写文章
如何在C++中修改EXE文件的详细信息
2023-07-14 20:30:15 深夜i     --     --
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++中的相关函数进行修改。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复