【发布时间】:2011-02-28 16:58:17
【问题描述】:
我需要使用我的程序更改一些 exe 文件图标。 我在 MSDN 和网站上找到了一些信息和示例代码,但我仍然在同一个地方。
我需要从 SHELL32.dll 中提取图标
uInt = ExtractIconEx("%SystemRoot%\\system32\\SHELL32.dll" , -63008, &hIcon, NULL, 1);
然后更新一些exe文件资源。但这里我的问题开始了。 我不知道如何使用 ExtractIconEx() 函数返回的 HICON 作为 UpdateResource() 函数的参数。
功能代码如下:
void ChangeFileIcon(char * file)
{
HICON hIcon;
UINT uInt;
HANDLE hFile;
LPVOID lpResLock;
uInt = ExtractIconEx("%SystemRoot%\\system32\\SHELL32.dll" , -63008, &hIcon, NULL, 1);
printf("%d", uInt);
lpResLock = LockResource(hIcon);
if (lpResLock == NULL){
printf("LockResource fail ;s\n");
return ;
}
hFile = BeginUpdateResource(file, false);
if(hFile == NULL){
printf("hFile == NULL - error %d\n", GetLastError());
return;
}
UpdateResource(hFile,
RT_ICON,
MAKEINTRESOURCE(1),
MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
lpResLock(?),
SizeofResource(????, ????)););
EndUpdateResource(hFile, FALSE);
}
有来自 MSDN 的示例,但它根本没有帮助我: http://msdn.microsoft.com/en-us/library/ms648008%28v=vs.85%29.aspx#_win32_Updating_Resources (在这个示例资源中,一个 exe 被复制到另一个)
感谢您的回答, 埋葬
【问题讨论】:
-
您最好使用工具来执行此操作,而不是尝试对其进行编程。例如,IcoFX 会让这变得微不足道。