本文整理自网络,侵删。
//请自行添加到 Type 处PICONDIRENTRY = ^ICONDIRENTRY;ICONDIRENTRY = packed recordbWidth: Byte;bHeight: Byte;bColorCount: Byte;bReserved: Byte;wPlanes: Word;wBitCount: Word;dwBytesInRes: DWORD;dwImageOffset: DWORD;end;PICONDIR = ^ICONDIR;ICONDIR = packed recordidReserved: Word;idType: Word;idCount: Word;idEntries: ICONDIRENTRY;end;
PGRPICONDIRENTRY = ^GRPICONDIRENTRY;GRPICONDIRENTRY = packed record;bWidth: Byte;bHeight: Byte;bColorCount: Byte;bReserved: Byte;wPlanes: Word;wBitCount: Word;dwBytesInRes: DWORD;nID: Word;end;
PGRPICONDIR = ^GRPICONDIR;GRPICONDIR = packed recordidReserved: Word;idType: Word;idCount: Word;idEntries: GRPICONDIRENTRY;end;
////////////////////////////////////////////////函数说明:修改EXE图标//! u% R! F5 H8 W. e- d& @//参 数:IconFile 图标文件// ExeFile 被修改的EXE文件////返回值: 成功为True,否则False./////////////////////////////////////////////function ChangeExeIcon(IcoFile, ExeFile: string): Boolean;varstID: ICONDIR;stGID: GRPICONDIR;pGrpIcon: PBYTE;pIcon: PBYTE;hUpdate: DWORD;nSize, nGSize: DWORD;hFile: THandle;dwReserved: DWORD; * i' i)ret: Boolean;beginResult := False;
hFile := CreateFile(PChar(IcoFile), GENERIC_READ, 0, nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);if hFile = INVALID_HANDLE_VALUE thenExit;
tryReadFile(hFile, stID, Sizeof(ICONDIR), dwReserved, nil);
nSize := stID.idEntries.dwBytesInRes;GetMem(pIcon, nSize);SetFilePointer(hFile, stID.idEntries.dwImageOffset, nil, FILE_BEGIN);ReadFile(hFile, pIcon^, nSize, dwReserved, nil);
stGID.idType := 1;stGID.idCount := stID.idCount;stGID.idReserved := 0;CopyMemory(@stGID.idEntries.bWidth, @stID.idEntries.bWidth, 12);stGID.idEntries.nID := 0;
nGSize := Sizeof(GRPICONDIR);GetMem(pGrpIcon, nGSize);CopyMemory(pGrpIcon, @stGID, nGSize);. y, i% c6 \' nhUpdate := BeginUpdateResource(PChar(ExeFile), False);tryret := UpdateResource(hUpdate, RT_GROUP_ICON, MAKEINTRESOURCE(1), 0, pGrpIcon, nGSize);ret := UpdateResource(hUpdate, RT_ICON, MAKEINTRESOURCE(1), 0, pIcon, nSize);finallyEndUpdateResource(hUpdate, False);end;finallyCloseHandle(hFile);end;3
Result := ret;end;
相关阅读 >>
Delphi twebbrowser流程讲解及如何判断下载网页成功
Delphi 32位程序 out of memory 内存不足时解决办法之一
Delphi 解决“richedit line insertion error”错误
Delphi firedac 下的 sqlite [12] - 备忘录
更多相关阅读请进入《Delphi》频道 >>