begin process at 2012 05 29 12:39:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

Modifier exe icone


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Modifier exe icone

dimanche 8 mai 2011 à 21:50:24 | Modifier exe icone

zod331

Bonsoir,

Je cherche une methode pour modifier l'icone d'une executable a partir d'un programme,
d'abord recuperer les icones d'un fichier ico et les ajouter d'un un exe avec UpdateResource.
Ma fonction ne fonctionne presque pas, voir fait planter l'application.
Merci de vos reponses.

typedef struct {
BYTE bWidth;
BYTE bHeight;
BYTE bColorCount;
BYTE bReserved;
WORD wPlanes;
WORD wBitCount;
DWORD dwBytesInRes;
DWORD dwImageOffset;
} ICONDIRENTRY, *LPICONDIRENTRY;

typedef struct {
WORD idReserved;
WORD idType;
WORD idCount;
ICONDIRENTRY idEntries[1];
} ICONDIR, *LPICONDIR;

#pragma pack(push)
#pragma pack(2)
typedef struct {
BYTE bWidth;
BYTE bHeight;
BYTE bColorCount;
BYTE bReserved;
WORD wPlanes;
WORD wBitCount;
DWORD dwBytesInRes;
WORD nId;
} GRPICONDIRENTRY, *LPGRPICONDIRENTRY;
#pragma pack(pop)

#pragma pack(push)
#pragma pack(2)
typedef struct {
WORD idReserved;
WORD idType;
WORD idCount;
GRPICONDIRENTRY idEntries[1];
} GRPICONDIR, *LPGRPICONDIR;
#pragma pack(pop)


BOOL AddFileIcon(LPSTR szIFileName, LPSTR szEFileName)
{

HANDLE hIcon = CreateFile(szIFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(!hIcon)
return FALSE;

LPBYTE lpBuf;
DWORD dwFileSize, dwBytesRead;

dwFileSize = GetFileSize(hIcon, NULL);
lpBuf = (LPBYTE)malloc(dwFileSize);
if(!lpBuf){
CloseHandle(hIcon);
return FALSE;
}

LPICONDIR lpid = (LPICONDIR) malloc(sizeof(ICONDIR));
if(!lpid) return FALSE;

ReadFile(hIcon, &lpid->idReserved, sizeof(WORD), &dwBytesRead, NULL);
ReadFile(hIcon, &lpid->idType, sizeof(WORD), &dwBytesRead, NULL);
ReadFile(hIcon, &lpid->idCount, sizeof(WORD), &dwBytesRead, NULL);

lpid = (LPICONDIR) realloc(lpid, (sizeof(WORD) * 3) + (sizeof(ICONDIRENTRY) * lpid->idCount));
if(!lpid) return FALSE;

ReadFile(hIcon, &lpid->idEntries[0], sizeof(ICONDIRENTRY) * lpid->idCount, &dwBytesRead, NULL);

LPGRPICONDIR lpgid = (LPGRPICONDIR)malloc(sizeof(GRPICONDIR));
if(!lpgid) return FALSE;

lpgid->idReserved = lpid->idReserved;
lpgid->idType = lpid->idType;
lpgid->idCount = lpid->idCount;
lpgid = (LPGRPICONDIR)realloc(lpgid, (sizeof(WORD) * 3) + (sizeof(GRPICONDIRENTRY) * lpgid->idCount));
if(!lpgid) return FALSE;
for(int i = 0; i < lpgid->idCount; i++){
lpgid->idEntries[i].bWidth = lpid->idEntries[i].bWidth;
lpgid->idEntries[i].bHeight = lpid->idEntries[i].bHeight;
lpgid->idEntries[i].bColorCount = lpid->idEntries[i].bColorCount;
lpgid->idEntries[i].bReserved = lpid->idEntries[i].bReserved;
lpgid->idEntries[i].wPlanes = lpid->idEntries[i].wPlanes;
lpgid->idEntries[i].wBitCount = lpid->idEntries[i].wBitCount;
lpgid->idEntries[i].dwBytesInRes = lpid->idEntries[i].dwBytesInRes;
lpgid->idEntries[i].nId = i + 1;
}

HANDLE hUpdateRes;
hUpdateRes = BeginUpdateResource(szEFileName, TRUE);

for(int i = 0; i < lpid->idCount; i++){
LPBYTE lpBuffer = (LPBYTE)malloc(lpid->idEntries[i].dwBytesInRes);
if(!lpBuffer) return FALSE;
SetFilePointer(hIcon, lpid->idEntries[i].dwImageOffset, NULL, FILE_BEGIN);
ReadFile(hIcon, lpBuffer, lpid->idEntries[i].dwBytesInRes, &dwBytesRead, NULL);
if(!UpdateResourceA(hUpdateRes, RT_ICON, MAKEINTRESOURCE(lpgid->idEntries[i].nId), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), &lpBuffer[0], lpid->idEntries[i].dwBytesInRes)){
free(lpBuf);
free(lpBuffer);
return FALSE;
}
free(lpBuffer);
}

if(!UpdateResourceA(hUpdateRes, RT_GROUP_ICON, MAKEINTRESOURCE(1), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), &lpgid[0], (sizeof(WORD) * 3) + (sizeof(GRPICONDIRENTRY) * lpgid->idCount))){
free(lpBuf);
return FALSE;
}

if(!hUpdateRes){
free(lpBuf);
return FALSE;
}

if(!EndUpdateResource(hUpdateRes, FALSE)){
free(lpBuf);
return FALSE;
}

//free(lpid);
//free(lpgid);
free(lpBuf);
CloseHandle(hIcon);

return TRUE;
}


Cette discussion est classée dans : word, return, lpid, identries, lpgid


Répondre à ce message

Sujets en rapport avec ce message

Exportations de données vers Word ou Excel [ par sebastien ] Bonjour, je suis étudiant (débutant en informatique) et dans le cadre de mon cours d'informatique je dois réaliser une petite application Base de donn Word 8.0 & HTML avec C++ comment ??? [ par mbgh ] J'ai quelques articles écrits en Word 8.0 ( et en HTML )je veux savoir comment les intégrer à une ApplicationMFC APP Wizard ... ( en Visual C++ )et co arrive pas a compiler .... [ par Heero ] #include void display();int main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); ressources et API !!!! [ par Xs ] salut !voila, pour me simplifier la tache, j'utlise les ressources pour creer une boite de dialog (sous VC++ 6).mais j'obtiens, lors de la compilation créer un arbre à partir d'un fichier word [ par yeager ] Bonjour je suis nouveau et débutant en langage CJe souhaite pouvoir lire un fichier word comportant des informations sur plusieurs livres. A partir de scanf() [ par clb ] bonjour à tous,j'ecris par exemple :int fonction(){ if(true) return 0; else return -1}dans main, si cette fonction retourne 0,alors j'appli Pb sur un ptit bout de prog en DirectX.... [ par Haldwin ] Salut a tous....Voila j'ai deux ptits pbs quand je lance cette appli ci-dessous... (VC++)La première est q'une fois sur deux ma variable hWnd apres le Piloter Word depuis Visual c++ [ par TheRod23 ] Bonjour a tous,je suis en train de developper une application pour laquelle je voudrais une fois toute les information saisie pas un utilisateur gener Ca veut pas s'afficher !!! [ par Nini ] Bon alors voilà le probleme : je doit faire afficher une phrase aléatoirement avec un switch et un rand mais elle veut pas s'afficher. Voilà ma source récursivité et factorielle!!! [ par cabarrus ] salut je veux écrire un programme qui calcule et renvoie le résultat factorielle en utilisant la récursivité de n'importe qu'elle nombre entier voici


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,156 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales