mogwai93 Posté(e) le 12 septembre 2005 Partager Posté(e) le 12 septembre 2005 j'aimerais faire un programme qui cree des fichiers exe avec des fonctions que je pourrais parametrer (comme les programmes du style d'installshield) je programme en c/c++ merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
njoyard Posté(e) le 12 septembre 2005 Partager Posté(e) le 12 septembre 2005 j'aimerais faire un programme qui cree des fichiers exe avec des fonctions que je pourrais parametrer (comme les programmes du style d'installshield) je programme en c/c++ merci Fais ton programme "a créer" d'abord, avec toutes les fonctions présentes, et en ressources, une chaine, par exemple, qui lui dit quelles fonctions activer ou non... Après avec ton EXE "créateur" tu n'as qu'à modifier cette table des ressources pour activer/désactiver les fonctions. Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 13 septembre 2005 Auteur Partager Posté(e) le 13 septembre 2005 Fais ton programme "a créer" d'abord, avec toutes les fonctions présentes, et en ressources, une chaine, par exemple, qui lui dit quelles fonctions activer ou non... Après avec ton EXE "créateur" tu n'as qu'à modifier cette table des ressources pour activer/désactiver les fonctions. ok, jusque là, ca semble fonctionner par contre, comment modifier les ressources d'un exe à partir de mon programme "createur" ? car pour tester, j'ai modifié le contenu de ressources avec reshacker merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
njoyard Posté(e) le 16 septembre 2005 Partager Posté(e) le 16 septembre 2005 Ca je n'en sais rien... Demande aux créateurs de ResHacker, ou change ton titre de post ("Modifier les ressources d'un EXE") pour avoir plus de chances d'etre lu.... Si c'est juste une chaine de caractères de longueur fixe (par exemple, un caractère par fonction activable/désactivable) je pense que tu peux le faire en binaire, non ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 21 septembre 2005 Auteur Partager Posté(e) le 21 septembre 2005 j'ai trouvé la reponse sur msdn voici le lien faut que je teste pour voir si ca passe Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 6 octobre 2005 Auteur Partager Posté(e) le 6 octobre 2005 un chti voici le code de la msdn HRSRC hResLoad; // handle to loaded resource HANDLE hExe; // handle to existing .EXE file HRSRC hRes; // handle/ptr. to res. info. in hExe HANDLE hUpdateRes; // update resource handle char *lpResLock; // pointer to resource data BOOL result; // Load the .EXE file that contains the dialog box you want to copy. hExe = LoadLibrary("hand.exe"); if (hExe == NULL) { ErrorHandler("Could not load exe."); } // Locate the dialog box resource in the .EXE file. hRes = FindResource(hExe, "AboutBox", RT_DIALOG); if (hRes == NULL) { ErrorHandler("Could not locate dialog box."); } // Load the dialog box into global memory. hResLoad = LoadResource(hExe, hRes); if (hResLoad == NULL) { ErrorHandler("Could not load dialog box."); } // Lock the dialog box into global memory. lpResLock = LockResource(hResLoad); if (lpResLock == NULL) { ErrorHandler("Could not lock dialog box."); } // Open the file to which you want to add the dialog box resource. hUpdateRes = BeginUpdateResource("foot.exe", FALSE); if (hUpdateRes == NULL) { ErrorHandler("Could not open file for writing."); } // Add the dialog box resource to the update list. result = UpdateResource(hUpdateRes, // update resource handle RT_DIALOG, // change dialog box resource "AboutBox", // dialog box name MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), // neutral language lpResLock, // ptr to resource info SizeofResource(hExe, hRes)); // size of resource info. if (result == FALSE) { ErrorHandler("Could not add resource."); } // Write changes to FOOT.EXE and then close it. if (!EndUpdateResource(hUpdateRes, FALSE)) { ErrorHandler("Could not write changes to file."); } // Clean up. if (!FreeLibrary(hExe)) { ErrorHandler("Could not free executable."); } disons que je veuille modifier les ressources BITMAP de l'exemple donné par devcpp : winanim dans le fichier ressource, on a : BALLBMP BITMAP "ball.bmp" MASKBMP BITMAP "ballmask.bmp" donc le code devient hRes = FindResource(hExe, "ball.bmp", RT_BITMAP); sauf que la compilation sous Devcpp me met plein d'erreur de conversion sur FindResource, LoadResource, LockResource, SizeofResource, FreeLibrary corrections, adaptations du code : j'obtiens HRSRC hResLoad; // handle to loaded resource HANDLE hExe; // handle to existing .EXE file HRSRC hRes; // handle/ptr. to res. info. in hExe HANDLE hUpdateRes; // update resource handle char *lpResLock; // pointer to resource data BOOL result; // Load the .EXE file that contains the dialog box you want to copy. hExe = LoadLibrary("1.exe"); if (hExe == NULL) { ErrorHandler(hwnd, "Could not load exe."); } //(HINSTANCE) // Locate the dialog box resource in the .EXE file. hRes = FindResource((HINSTANCE)hExe, "BALLBMP", RT_BITMAP); if (hRes == NULL) { ErrorHandler(hwnd, "Could not locate bitmap."); } // Load the dialog box into global memory. hResLoad = (HRSRC)LoadResource((HINSTANCE)hExe, hRes); if (hResLoad == NULL) { ErrorHandler(hwnd, "Could not load dialog box."); } // Lock the dialog box into global memory. lpResLock = (char *)LockResource((HINSTANCE)hResLoad); if (lpResLock == NULL) { ErrorHandler(hwnd, "Could not lock dialog box."); } // Open the file to which you want to add the dialog box resource. hUpdateRes = BeginUpdateResource("2.exe", FALSE); if (hUpdateRes == NULL) { ErrorHandler(hwnd, "Could not open file for writing."); } // Add the dialog box resource to the update list. result = UpdateResource(hUpdateRes, // update resource handle RT_BITMAP, // change dialog box resource "BALLBMP", // dialog box name MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), // neutral language lpResLock, // ptr to resource info SizeofResource((HINSTANCE)hExe, hRes)); // size of resource info. if (result == FALSE) { ErrorHandler(hwnd, "Could not add resource."); } // Write changes to 2.EXE and then close it. if (!EndUpdateResource(hUpdateRes, FALSE)) { ErrorHandler(hwnd, "Could not write changes to file."); } // Clean up. if (!FreeLibrary((HINSTANCE)hExe)) { ErrorHandler(hwnd, "Could not free executable."); } } donc plus de probleme de compilations ni de message d'erreur à l'execution le fichier 1.exe et 2.exe sont presque identiques la seule difference, c'est que j'ai interverti BALLBMP et MASKBMP sur 1.exe BALLBMP BITMAP "ball.bmp" MASKBMP BITMAP "ballmask.bmp" sur 2.exe MASKBMP BITMAP "ball.bmp" BALLBMP BITMAP "ballmask.bmp" resultat obtenu : le fichier 2.exe a reduit de taille les ressources bitmap n'ont pas ete modifiees par contre, une ressource boite de dialogue a été ajoutée mais elle est vide et fait planter Reshacker merci de me dire où j'aurais pu me tromper (et désolé pour la longueur) Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 6 octobre 2005 Auteur Partager Posté(e) le 6 octobre 2005 j'ai fait plusieurs tests et j'y suis presque (sans changer le code... ) les "problemes que j'ai : - l'executable 2.exe a réduit de taille mais fonctionne toujours - l'executable 2.exe a maintenant 3 ressources bitmap au lieu de 2 (2 BALLBMP et 1 MASKBMP) comment mettre à jour, plutot que d'ajouter ? merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.