Posté(e) le 12 septembre 200519 a 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
Posté(e) le 12 septembre 200519 a 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.
Posté(e) le 13 septembre 200519 a Auteur 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
Posté(e) le 16 septembre 200519 a 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 ? Modifié le 16 septembre 200519 a par k-o-x
Posté(e) le 21 septembre 200519 a Auteur j'ai trouvé la reponse sur msdn voici le lien faut que je teste pour voir si ca passe
Posté(e) le 6 octobre 200519 a Auteur 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)
Posté(e) le 6 octobre 200519 a Auteur 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
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.