Aller au contenu

exe qui crée des exe


mogwai93

Messages recommandés

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

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

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

  • 3 semaines après...

un chti :roll:

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 :transpi:

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

j'ai fait plusieurs tests et j'y suis presque (sans changer le code... :pleure: )

les "problemes que j'ai :

- l'executable 2.exe a réduit de taille mais fonctionne toujours :pleure::pleure:

- 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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...