Accueil > Forum > > > > pourkoi je n'arrive pas updater les ressources de mon propre prog
pourkoi je n'arrive pas updater les ressources de mon propre prog
vendredi 30 juillet 2004 à 00:40:05 |
pourkoi je n'arrive pas updater les ressources de mon propre prog

youpiyoyo
|
voila j'ai un prog ki tourne et j'aimerai updater les resources de mon prog, bien k'il soit toujours entrain de tourner je fais ca char* CurDirz=0; TCHAR tohBuffer[MAX_PATH]; CurDirz = tohBuffer; GetModuleFileName(NULL,CurDirz, MAX_PATH); MessageBox(0,CurDirz,0,0); HANDLE hUpdateRes = BeginUpdateResource(CurDirz, FALSE); if (hUpdateRes == NULL) { MessageBox(0,"Could not open file for writing.",0,0); } BOOL result = UpdateResource(hUpdateRes,RT_ICON,MAKEINTRESOURCE(104),MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), pIconImage,nSize); if (result == FALSE) { MessageBox(0,"Could not add resource.",0,0); } if (!EndUpdateResource(hUpdateRes, FALSE)) { MessageBox(0,"Could not write changes to file.",0,0); } aucune message d'erreur mais aucune trace de la rassource ke je viens d'ajouter en revanche si je le fais sur une dll ou exe extérieur ca marche aby suggestions?? youpi :)
|
|
vendredi 30 juillet 2004 à 10:18:45 |
Re : pourkoi je n'arrive pas updater les ressources de mon propre prog

DeAtHCrAsH
|
Tu ne peux pas Update les ressources d'un programme en cours d'utilisation!
Si je me rappelle bien de ton poste précédent, tu cherches a modifier l'icone de tes programmes.
En utilisant UpdateResource, sache que tu sera obligé de mettre un icone avec les memes caracteristique que le l'ancien (taille et nombre de couleur).
J'ai ssayé avec la méthode des UpdateResource, mais a vrai dire je ne suis arrivé a rien de concluant avec les aides trouver sur le net.
Le mieux est de te servir de la structure des PE (Portables Executable). Ainsi tu modifies direcetement les bytes correspondant a ton image.
Shell
|
|
vendredi 30 juillet 2004 à 10:21:21 |
Re : pourkoi je n'arrive pas updater les ressources de mon propre prog

youpiyoyo
|
bah écoute moi j'arrive a mettre une icone dans une resource, et je suis dans prendre une ico dans une resource et l'extraire et a ce ke l'on pourait croire c plus cho de l'extraire ke de la mettre.... youpi 
|
|
vendredi 30 juillet 2004 à 10:40:48 |
Re : pourkoi je n'arrive pas updater les ressources de mon propre prog

DeAtHCrAsH
|
pIconImage et nSize correspondent a quoi dans ton code ? Tu les déclares de quel manières et comment tu les utilises ?
Shell
|
|
vendredi 30 juillet 2004 à 10:44:36 |
Re : pourkoi je n'arrive pas updater les ressources de mon propre prog

youpiyoyo
|
#pragma pack( push ) #pragma pack( 2 ) typedef struct { BYTE bWidth; // Width of the image BYTE bHeight; // Height of the image (times 2) BYTE bColorCount; // Number of colors in image (0 if >=8bpp) BYTE bReserved; // Reserved WORD wPlanes; // Color Planes WORD wBitCount; // Bits per pixel DWORD dwBytesInRes; // how many bytes in this resource? WORD nID; // the ID } MEMICONDIRENTRY, *LPMEMICONDIRENTRY; typedef struct { WORD idReserved; // Reserved WORD idType; // resource type (1 for icons) WORD idCount; // how many images? MEMICONDIRENTRY idEntries[1]; // the entries for each image } MEMICONDIR, *LPMEMICONDIR; #pragma pack( pop )
#pragma pack( push ) #pragma pack( 2 ) typedef struct { BYTE bWidth; // Width, in pixels, of the image BYTE bHeight; // Height, in pixels, of the image BYTE bColorCount; // Number of colors in image (0 if >=8bpp) BYTE bReserved; // Reserved WORD wPlanes; // Color Planes WORD wBitCount; // Bits per pixel DWORD dwBytesInRes; // how many bytes in this resource? WORD nID; // the ID } GRPICONDIRENTRY, *LPGRPICONDIRENTRY; #pragma pack( pop )
#pragma pack( push ) #pragma pack( 2 ) typedef struct { WORD idReserved; // Reserved (must be 0) WORD idType; // Resource type (1 for icons) WORD idCount; // How many images? GRPICONDIRENTRY idEntries[1]; // The entries for each image } GRPICONDIR, *LPGRPICONDIR; #pragma pack( pop )
typedef struct { BYTE bWidth; // Width, in pixels, of the image BYTE bHeight; // Height, in pixels, of the image BYTE bColorCount; // Number of colors in image (0 if >=8bpp) BYTE bReserved; // Reserved ( must be 0) WORD wPlanes; // Color Planes WORD wBitCount; // Bits per pixel DWORD dwBytesInRes; // How many bytes in this resource? DWORD dwImageOffset; // Where in the file is this image? } ICONDIRENTRY, *LPICONDIRENTRY;
typedef struct { WORD idReserved; // Reserved (must be 0) WORD idType; // Resource Type (1 for icons) WORD idCount; // How many images? ICONDIRENTRY idEntries[1]; // An entry for each image (idCount of 'em) } ICONDIR, *LPICONDIR;
typedef struct { UINT Width, Height, Colors; // Width, Height and bpp LPBYTE lpBits; // ptr to DIB bits DWORD dwNumBytes; // how many bytes? LPBITMAPINFO lpbi; // ptr to header LPBYTE lpXOR; // ptr to XOR image bits LPBYTE lpAND; // ptr to AND image bits } ICONIMAGE, *LPICONIMAGE;
typedef struct { BOOL bHasChanged; // Has image changed? TCHAR szOriginalICOFileName[MAX_PATH]; // Original name TCHAR szOriginalDLLFileName[MAX_PATH]; // Original name UINT nNumImages; // How many images? ICONIMAGE IconImages[1]; // Image entries } ICONRESOURCE, *LPICONRESOURCE;
typedef struct { DWORD dwBytes; DWORD dwOffset; } RESOURCEPOSINFO, *LPRESOURCEPOSINFO; // EXE/DLL icon information - filename, instance handle and ID typedef struct { LPCTSTR szFileName; HINSTANCE hInstance; LPTSTR lpID; } EXEDLLICONINFO, *LPEXEDLLICONINFO;
void PutIconToRes(LPCTSTR szFile) { LPICONDIR pIconDir; DWORD uRead,nSize; LPICONIMAGE pIconImage; HANDLE hFile = CreateFile(szFile, GENERIC_READ, 0, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); pIconDir = (LPICONDIR) malloc( sizeof( ICONDIR ) ); ReadFile( hFile, &(pIconDir->idReserved), sizeof( WORD ), &uRead, NULL ); ReadFile( hFile, &(pIconDir->idType), sizeof( WORD ), &uRead, NULL ); ReadFile( hFile, &(pIconDir->idCount), sizeof( WORD ), &uRead, NULL ); pIconDir = (LPICONDIR)realloc( pIconDir, ( sizeof( WORD ) * 3 ) + ( sizeof( ICONDIRENTRY ) * pIconDir->idCount ) ); ReadFile( hFile, pIconDir->idEntries, pIconDir->idCount * sizeof(ICONDIRENTRY),&uRead, NULL );
// Loop through and read in each image for(int i=0;i<pIconDir->idCount;i++) { pIconImage = (LPICONIMAGE)malloc( pIconDir->idEntries[i].dwBytesInRes ); SetFilePointer( hFile, pIconDir->idEntries[i].dwImageOffset,NULL, FILE_BEGIN ); // Read the image data nSize=pIconDir->idEntries[i].dwBytesInRes; ReadFile( hFile, pIconImage, pIconDir->idEntries[i].dwBytesInRes,&uRead, NULL ); } /*char* CurDirz=0; TCHAR tohBuffer[MAX_PATH]; CurDirz = tohBuffer; GetModuleFileName(NULL,CurDirz, MAX_PATH);*/
//MessageBox(0,CurDirz,0,0);
HANDLE hUpdateRes = BeginUpdateResource("test resource.exe", FALSE); if (hUpdateRes == NULL) { MessageBox(0,"Could not open file for writing.",0,0); }
BOOL result = UpdateResource(hUpdateRes,RT_ICON,MAKEINTRESOURCE(104),MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), pIconImage,nSize); if (result == FALSE) { MessageBox(0,"Could not add resource.",0,0); }
if (!EndUpdateResource(hUpdateRes, FALSE)) { MessageBox(0,"Could not write changes to file.",0,0); }
// free( pIconImage ); //
}
tu trouveras tout ici youpi :)
|
|
vendredi 30 juillet 2004 à 10:59:10 |
Re : pourkoi je n'arrive pas updater les ressources de mon propre prog

DeAtHCrAsH
|
En fait ce que tu souhaites faire maintenant c'est recuperer le 104 qui correspond a l'ID de ton icone dans l'executables a modifier c'est ca ?
Shell
|
|
vendredi 30 juillet 2004 à 11:03:46 |
Re : pourkoi je n'arrive pas updater les ressources de mon propre prog

youpiyoyo
|
ouai en gros c ca mais c pour mon prog en général,
j'ai reussi mais le truc c si il y a pas de RT_GROUP_ICON, dans la façon ke je fais ca marche pas...
enfin bref je vais mettre mon source pour ke tu comprennes...
en ce ki concerne ma question de ce thread: la solution va etre surement d'updater une dll, ki va sharer c resource avec mon prog youpi :)
|
|
vendredi 30 juillet 2004 à 11:11:36 |
Re : pourkoi je n'arrive pas updater les ressources de mon propre prog

DeAtHCrAsH
|
Pas besoin de mettre ta source je vois ce que tu veux dire. Dans mon code j'utilise aussi le RT_GROUP_ICON. On ne peut pas faire sans à cause de la structure des PE. Le RT_ICON correspond seuleuement a l'emplacement des bytes de l'ICON. Le RT_GROUP_ICON correspond a l'ensemble de l'icone et c'est celui la qu'il nous faut.
Ainsi avec le code que j'ai commencé, j'arrive a récuprer l'ID de n'importe quel icone dans les PE.
Voici mon code en entier mais l'UPDATE NE MARCHE PAS:
#include <windows.h> #include <stdio.h> #include "resource.h"
HWND hDlg; HINSTANCE hInst;
void Alerte(char *Message, UINT uType) { MessageBox(hDlg,Message,"ALERTE",uType); }
bool EnumNamesFunc(HMODULE hModule, LPCTSTR lpType, LPTSTR lpName, LONG lParam) { HGLOBAL hResLoad; HRSRC hRes; LPVOID lpResLock; HANDLE hUpdateRes; BOOL result; HICON hGround;
char *buffer = new char[50]; if((ULONG)lpName & 0xFFFF0000) { sprintf(buffer,"%s",lpName); } else { sprintf(buffer,"%u",lpName); }
Alerte(buffer,MB_ICONINFORMATION); /* hRes = FindResource(hModule,lpName,RT_GROUP_ICON); if(hRes == NULL) { Alerte("Erreur lors de la recherche de la resource!",MB_ICONSTOP); return false; } */ /* hResLoad = LoadResource(hModule,hRes); if(hResLoad == NULL) { Alerte("Erreur lors du chargement de la resource!",MB_ICONSTOP); return false; }
lpResLock = LockResource(hResLoad); if(lpResLock == NULL) { Alerte("Erreur lors du verouillage de la resource!",MB_ICONSTOP); return false; } */
hGround = (HICON) LoadImage(NULL, "d:\\valve.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE); if(hGround == NULL) { Alerte("ICON PAS CHARGER",2); return false; } hUpdateRes = BeginUpdateResource("d:\\Crack.exe",FALSE); if(hUpdateRes == NULL) { Alerte("Erreur lors du démarrage de l'update de la resource!",MB_ICONSTOP); return false; }
result = UpdateResource(hUpdateRes,RT_ICON,MAKEINTRESOURCE(lpName),MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),hGround, SizeofResource(hModule, hRes)); if(result == false) { Alerte("Erreur lors de l'update de la resource!",MB_ICONSTOP); }
if (!EndUpdateResource(hUpdateRes, FALSE)) { Alerte("Erreur de Fin d'Updtae!",MB_ICONSTOP); }
return true; }
bool GetResource() { int res; HMODULE hModule;
hModule = LoadLibrary("D:\\Crack.exe"); if(hModule == NULL) { Alerte("Erreur lors du chargement du fichier!",MB_ICONSTOP); FreeLibrary(hModule); return false; }
res = EnumResourceNames(hModule,RT_GROUP_ICON,(ENUMRESNAMEPROC)EnumNamesFunc,0); if(res == NULL) { Alerte("Erreur lors de l'énumération des resources!",MB_ICONSTOP); FreeLibrary(hModule); }
return true; }
|
|
vendredi 30 juillet 2004 à 11:19:25 |
Re : pourkoi je n'arrive pas updater les ressources de mon propre prog

youpiyoyo
|
alors tiens va voir http://www.cppfrance.com/code.aspx?id=25021 c toujours en construction donc scuse pour le mank de clareté dans mon code mais les enumresource je vais l'utilisé un peu plus tard kan j'aurai fini ce ke je veux faire je t'explike pour koi ton updateresource ne marche pas tu le fais sur HICON hGround; si tu regarde le msdn il te dis lpData [in] Pointer to the resource data to be inserted into the executable file. If the resource is one of the predefined types, the data must be valid and properly aligned. Note that this is the raw binary data stored in the executable file, not the data provided by LoadIcon, LoadString, or other resource-specific load functions. All data containing strings or text must be in Unicode format; lpData must not point to ANSI data.
donc c également pour un HICON, il fo k'il soit unicode et raw bianary... de plus il ne fo pas ke les header + offset +etc... (toutes les infos de l'ico) donc tout ce ki est avant le '(' au début j'avais pensé com toi....  c vrai ke cela aurait été plus simple je te l'accorde, il pourait tout de meme faire un fonction ki accepete de transfaser le HICON, pour le mettre en resource youpi :)
|
|
Cette discussion est classée dans : prog, messagebox, curdirz, hupdateres, updater
Répondre à ce message
Sujets en rapport avec ce message
messagebox et l'heure [ par mat74 ]
Salut a ts j'aimerai bien afficher ds un messagebox qqchose du genre :heure de debut : l'heure au commencement du progheure de fin : l'heure a la ferm
0 error 0 warning mais le prog refuse de se lancer [ par JRB ]
mon probleme apparait lorsque je declare : for (int x = 0 ; x {m_ClientSocket[x].SetParentWindow(this);}quand je met seulement : m_ClientSocke
Réveiller un prog à heure fixe. [ par julien20vt ]
Bonjour,J'aurais besoin dans mon programme de spécifier une heure de réveil.Un peu comme un sleep(x minutes) mais de la forme (sleep jusqu'a telle heu
Passage d'une instance d'une classe d'un prog à un autre par une shared memory [ par vinvay ]
Voici la classe que j'utilise :class MsgQueue{ private: int msg_max; //Message *msgqueue; char msg[100][100]; public: int indd, indf; MsgQueue(in
.def sous VC++ [ par AlexMAN ]
Hello all, alors voilà le pb : j'ai commencé la prog dll en C sous VC++ mais mais mes fonctions une fois compilé ont des décorations. Ex : intlen devi
help me please !!! [ par NYHC ]
Slt à tous ceux qui liront mon message, voici donc le pblm:il me faudrait un prog en c qui afficherait la table de vérité d'une expression booléenne à
ouvrir un fichier avec un prog defini (pas par default) [ par enigmatiqk ]
bon ba je me suis balader de partt, et pour ouvrir un fichier jai capter qu'il falli utilisé shellexecute..., seulement voila, ca ouvre un fichier par
[MFC] poblème de splitter [ par TibobiT ]
Bonjour à tous,j'ai trouvé un exemple de CSplitterWnd que j'ai appliqué à un prog tout simple pour voir.Je n'utilise qu'un seul splitter, les panneaux
Que fait Dev Cpp pour un prog win? [ par floindahouse1 ]
Lorsque je crée un projet "programme windows" sous dev cpp, et que je remplace tout le main.cpp par:#...int main(){MessageBox(....)}lorsque je lance l
Scanner un serveur FTP [ par shaolinn ]
hello tlmVoici mon probleme : Je cherche a scanner un serveur FTp,pour cela j'utilise la librairie wininetje me sert de cette fonction :HINTERNET FtpF
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|