Page 1 sur 2

[Tuto] Création d'une dll de ressources pour votre script.

Posté : dim. 30 déc. 2007 00:31
par Tlem
HowTo de création d'une dll de ressources, pour accompagner vos scripts Autoit.
*** ATTENTION ***
Une DLL de ressources ne contient aucune fonction ou code d'exécution.
Elle est destinée à ne contenir que des images, sons, videos, fichiers, etc ...


Si le tutoriel ci-dessous vous rebute, vous pouvez aussi utiliser un outil déjà tout fait. Cet outil vous permettra de sélectionner les ressources à ajouter à la DLL, d'en déterminer le nom, etc ... Une fois enregistrée, celle-ci est directement utilisable avec les fonctions adaptées.

Vous trouverez le sujet sur cet outil ici : http://www.autoitscript.fr/forum/viewto ... 501#p11501
*** Edit : Une version plus élaborée existe sur le forum US et de plus il est 100% fait en code AutoIt : ResHacker project
Cette version permet d'éditer et/ou de créer une DLL de ressource par simple Drag&Drop, mais vous pouvez aussi visualiser les ressources d'un Exe !

Pour utiliser les ressources intégrées dans votre DLL (ou une autre DLL de ressources) voir même dans un autre exécutable, cliquez sur ce texte.


* Commençons la partie tutoriel :
Pour créer une dll qui contiendra des ressources, il vous faudra quelques pré-requis.
Ces derniers peuvent être récupérer dans le pack MASM32 (http://www.masm32.com/masmdl.htm),
ou télécharger dans l'exemple joint au post.

Voici les 5 programmes qui vous permettrons de créer vos dll de ressources :

- RC.exe (Microsoft Resource Compiler)
- RCdll.dll (Microsoft Windows Resource Compiler DLL)
- Link.exe (Microsoft (R) Incremental Linker)
- cvtres.exe (Resource File To COFF Object Conversion Utility)
- mspdb50.dll (Microsoft (R) Program Database)


Ensuite, il faut créer le fichier de ressource (Fichier qui liste les ressources à intégrer dans la dll).
Dans un premier temps, ajouter les lignes comme ceci :

Code : Tout sélectionner

NomDeLaRessource    TypeDeLaRessource   "Nom Du Fichier"
Séparer les nom par une tabulation, et éviter les espaces dans le nom de la ressource.

Voici les principaux type de ressource utilisées :
  • CURSOR (Fichiers curseur)
    ICON (Fichiers icône non compressé)
    BITMAP (Fichiers image bitmap)
    WAVE (Fichiers son wave)
    AVI (Fichiers video avi)
    RCDATA (Fichiers divers)
Mais il en existe d'autres :
  • ACCELERATOR
    ANICURSOR
    ANIICON
    DIALOG
    DLGINCLUDE
    FONT
    FONTDIR
    GROUP_CURSOR
    GROUP_ICON
    HTML
    RT_HTML DISCARDABLE
    MANIFEST
    MENU
    MESSAGETABLE
    PLUGPLAY
    STRING
    VERSION
    VXD

Cela devrait donner un fichier ressource similaire à ceci (Nous l'appellerons MaDll.rc) :

Code : Tout sélectionner

POINTER     CURSOR  example.cur
ACCESS      ICON    example.ico
TOOLBAR     BITMAP  example.bmp
WHISTLE     WAVE    example.wav
Il est bien, dans certains cas, de rajouter quelques informations personnelle à votre dll.
Il est tout à fait possible de rajouter, un N° de version, un commentaire, un auteur ....
Pour ce faire, rajouter et modifier en conséquence le texte suivant à la suite des ressources,
dans le fichier MaDll.rc :

Code : Tout sélectionner

1 VERSIONINFO
FILEVERSION 0,0,0,1
PRODUCTVERSION 0,0,0,1
FILEOS 0x40004
FILETYPE 0x2
{
BLOCK "StringFileInfo"
{
    BLOCK "040C04B0"
    {
        VALUE "CompanyName", "Ma Compagnie"
        VALUE "FileDescription", "Description du fichier"
        VALUE "FileVersion", "0,0,0,1"
        VALUE "InternalName", "Nom Interne du fichier"
        VALUE "LegalCopyright", "Copyright (C) 2007-2008"
        VALUE "OriginalFilename", "MaDll.dll"
        VALUE "ProductName", "Nom du Produit"
        VALUE "ProductVersion", "0,0,0,1"
        VALUE "Comments", ""
    }
}

BLOCK "VarFileInfo"
{
    VALUE "Translation", 0x040C 0x04B0
}
}
Voilà, il ne nous reste plus qu'à créer notre dll.
Placer bien le fichier MaDll.rc et les ressources que vous voulez ajouter dans le même répertoire,
et lancer les commandes suivantes :

Code : Tout sélectionner

RC.exe /r MaDll.rc
Link.exe /nodefaultlib /dll /machine:ix86 /noentry /out:MaDll.dll MaDll.res
Le programme RC.exe va donc créer un fichier de ressource (MaDll.res), qui va permettre l'intégration de tous les fichiers dans la dll, grâce au Linker de Microsoft.
Le fichier MaDll.res peut donc être supprimer après la création de la dll.

Et voilà, votre dll est prête à être utilisée avec votre script/logiciel préférer.
Vous trouverez les programmes requis, ainsi qu'un exemple de création d'une dll par un script Batch à la fin du message.


En ce qui concerne l'utilisation de cette dll dans vos scripts, selon la ressource à récupérer, vous pouvez utiliser pour des icônes :

Code : Tout sélectionner

GUICtrlCreateButton ("my picture button", 10,20,40,40, $BS_ICON)
GUICtrlSetImage (-1, "shell32.dll",22)
Voir la documentation pour plus de détail sur son utilisation.
Ou pour des images format Bitmap, la fonction SetBitmapResourceToPicCtrl écrite dans le code exemple suivant :
► Afficher le texteSetBitmapResourceToPicCtrl
*** Pour tout autre utilisation de ressource, veuillez utiliser l'UDF Ressource.au3 disponible sur ce lien :
http://www.autoitscript.fr/forum/viewto ... f=11&t=513


Voici un exemple d'utilisation pour une image GIF par exemple :
► Afficher le texteExemple

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : jeu. 28 févr. 2008 21:53
par Tlem
Voici un autre exemple d'utilisation :

Code : Tout sélectionner

; Par Zedna.
; Lien du post original du forum Anglais :
; http://www.autoitscript.com/forum/index.php?showtopic=63748&view=findpost&p=477973

#include <GUIConstants.au3>
#include <WinAPI.au3>

$Form1 = GUICreate("", 400, 400)
$pic = GUICtrlCreatePic("", 0, 20, 400, 380)
GUICtrlSetState(-1, $GUI_DISABLE)
$b1 = GUICtrlCreateButton("Change Pic", 150, 0, 100, 20)
GUISetState(@SW_SHOW)
Global $i = 0, $aBitmaps[46] = [130,131,133,134,135,136,137,138,140,141,142,143, 14351,14353,14354,14355,14356, 145,146,147,148,149,204,205,206,207,214,215,216,217,225,226,227,228,230,231,240,241,242,245,246,247, 309,310,369,390]
While 1
    Switch GuiGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $b1
            GUICtrlSetImageFromDLL($pic, 'shell32.dll', $aBitmaps[$i])
            $i += 1
            If $i = UBound($aBitmaps)-1 Then $i = 0
    EndSwitch
WEnd

Func GUICtrlSetImageFromDLL($controlID, $filename, $imageIndex)
    Local Const $STM_SETIMAGE = 0x0172

    $hLib = _WinAPI_LoadLibrary($filename)
    $hBmp = _WinAPI_LoadImage($hLib, $imageIndex, $IMAGE_BITMAP, 0, 0, $LR_DEFAULTCOLOR)
    GUICtrlSendMsg($controlID, $STM_SETIMAGE, $IMAGE_BITMAP, $hBmp)
    _WinAPI_FreeLibrary($hLib)
    _WinAPI_DeleteObject($hBmp)
EndFunc

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : dim. 16 mars 2008 07:58
par Vins83
j'ai simplifier un peu juste pour afficher une seul image:

Code : Tout sélectionner

#include <GUIConstants.au3>
#include <WinAPI.au3>

$Form1 = GUICreate("", 410, 180)

$pic = GUICtrlCreatePic("", 0, 0, 410, 180)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$hBmp = _WinAPI_LoadImage(_WinAPI_LoadLibrary("shell32.dll"), 130, $IMAGE_BITMAP, 0, 0, $LR_DEFAULTCOLOR)
GUICtrlSendMsg($pic, 0x0172, $IMAGE_BITMAP, $hBmp)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

GUISetState(@SW_SHOW)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : lun. 17 nov. 2008 00:08
par Tlem
Comme certains membres du forum aime bien travailler avec une Dll de ressource et que de nombreuses questions ont été posées à ce propos, j'ai pris l'initiative de créer un outil en Français et en Anglais qui vous aidera à créer votre Dll de manière très simple.

Je vous livre les deux versions tel quel avec les fichiers Microsoft nécessaires à la création de la Dll. Vous n'avez plus qu'à compiler celle qui vous intéresse et à l'utiliser. 8)
Pour ce faire, téléchargez le fichier joint au message.

Lien pour télécharger le script compilé : RDG.exe
Les sources : RDG_SRC.zip

PS: Les fichiers icône ne doivent pas être compressés.

Edit : Il existe une autre version d'un utilitaire de gestion des ressources un peut plus complet car il permet la visualisation des ressources d'un fichiers.
Ce script peut être téléchargé ici : http://www.autoitscript.com/forum/index ... opic=85618
=====================================================================
English Version :
As some members of the forum like working with a resources Dll and that a lot of questions were put on this matter, I took the initiative to create a tool in French and in English language that help you to simply assist you to create your Dll.

I give you both versions such which with Microsoft necessary files for the creation of Dll. You do not have more than to compile the one who interests you and to use it. 8) To do it, download the attached file to the message.

Link to download the compiled script : RDG.exe
The source files : RDG_SRC.zip

PS: Icon Files must not be compressed

Edit : There is an other tools to manipulate files ressources that is more complete than mine. With it, you can view files ressources.
This script can be downloaded here : http://www.autoitscript.com/forum/index ... opic=85618

- RDG.Zip V1.0 téléchargé 14 fois.
- RDG.Zip V2.0 téléchargé 6 fois.
- RDG.Zip V2.1 téléchargé 172 fois.

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : mar. 18 nov. 2008 00:01
par Jikoo
Merci Tlem pour ce programme excellent. Ca fonctionne à merveille ! :D

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : mar. 18 nov. 2008 20:39
par Yogui
Superbe je n'ai jamais utiliser de dll perso de peur de perdre du temps lors de la création mais je n'ai plus cette excuse merci et bravo pour ce code

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : lun. 24 nov. 2008 22:29
par Tlem
Mise à jour du script et de l'exécutable RDG en V2.0
Script rendu bilingue Anglais/Français.

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : mar. 25 nov. 2008 22:41
par Tlem
Mise à jour du script et de l'exécutable RDG en V2.1

J'ai corrigé une grossière erreur d'attribution de variable, qui m'effaçait le tableau $Lang. :oops:
J'en ai profité pour rajouter une boite de dialogue pour signaler la sauvegarde du fichier Dll et pour corriger un autre bug masqué par le premier. :roll:
Et 2 améliorations cosmétique.

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : mer. 26 nov. 2008 13:40
par timmalos
Et 2 améliorations cosmétique.
Tu fais de la chirurgie aux programmes toi ? :lol:

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : mer. 26 nov. 2008 14:29
par Tlem
C'est une expression pour des améliorations visuelles. ;)

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : mer. 10 déc. 2008 01:17
par arrkhan
beau travail ^^, on en parlait déja sur l'ancien forum de faire un exe pour créer les dll, t'as pris le temps :P

sinon, pourquoi ne pas avoir utiliser la solution [Tuto] Internationaliser vos softs pour le choix de la langue ? détection automatique de la langue du système, si francais, alors gui en fr, si autre alors gui en anglais...

je dis ca, je dis rien, mon tuto souffrant de 0 réponse, il est peut-être passé inapercu :roll:

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : mer. 10 déc. 2008 07:52
par Tlem
J'avais bien vu ton post, mais comme je n'ai pas eu le temps de tester ta méthode et que je voulais que mon script fonctionne en Français pour tout les pays Francophone et en Anglais pour le reste, j'ai trouvé ma méthode plus simple et plus rapide. ;)

Edit : Après avoir relus ton post, voici se que j'en conclu pour mon cas présent.
Il faudrait que je mette #AutoIt3Wrapper_Res_Language=1036 pour mettre la langue par defaut en Anglais.
Ensuite pour chaque pays Francophone, je devrais faire ceci :

Code : Tout sélectionner

#AutoIt3Wrapper_Run_After=Utils\ResHacker.exe -add %out%, %out%, res\txt1033.txt, rcdata, TXT, 1033 ; France
#AutoIt3Wrapper_Run_After=Utils\ResHacker.exe -add %out%, %out%, res\txt2060.txt, rcdata, TXT, 2060 ; Belgique
#AutoIt3Wrapper_Run_After=Utils\ResHacker.exe -add %out%, %out%, res\txt3084.txt, rcdata, TXT, 3084 ; Canada
...
Même si la solution est plus élégante, elle n'en est pas moins lourde.
Dans ce cas, autant adopter la solution d'un répertoire qui contiendrait tout les fichiers de langue et utiliser celui qu'il convient en fonction de l'OS (comme l'à fait Jikoo).

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : mar. 06 janv. 2009 15:52
par BeCool
Je tenais juste a signaler que ce lien http://masm32.online.fr/masm32.htm est mort ;)

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : mar. 06 janv. 2009 21:25
par Tlem
Lien corrigé.

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : mer. 14 janv. 2009 20:34
par Florinouxxx
Bonjour, je ne sais pas si j'ai le droit de poster ici, mais on va tenter le coup =X

J'ai lu et relut ton tuto, mais pas moyen de comprendre, en effet, au début tu dit :
Ensuite, il faut créer le fichier de ressource (Fichier qui liste les ressources à intégrer dans la dll).
Dans un premier temps, ajouter les lignes comme ceci :
Mais dans quel programme ? A tout hasard j'ai essayé avec Dev C++ et ça marche, mais est-ce bon ?

J'ai ensuite continué, et j'ai vu :
et lancer les commandes suivantes :

Code : Tout sélectionner

RC.exe /r MaDll.rc
Link.exe /nodefaultlib /dll /machine:ix86 /noentry /out:MaDll.dll MaDll.res
Je me suis dit que je devait aller dans "executer" et mettre ça dedans, mais ça me met une erreur, j'ai alors essayé d'ouvrir RC.exe avec le dossier joint en bas de ton post, mais il y a une fenetre console qui s'ouvre et qui se referme immédiatement sans rien faire, j'ai essayé de glisser MaDll.rc dans RC.exe, mais là non plus, rien du tout, j'ai essayer de copier-coller ça dans la fenetre commande, mais il me dit que RC.exe n'est pas reconnu en tant que commande interne.

Enfin voilà, je suis un peu perdu, de l'aide serait bienvenue, merci :D

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : mer. 14 janv. 2009 21:07
par Tlem
Le post est pourtant clair, ainsi que les fichiers d'exemples.
Il faut juste prendre le temps de lire tranquillement et de comprendre.

Sinon, si vous êtes pressé, utilisez l'outil RDG.exe que j'ai mis à disposition sur ce post.

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : sam. 17 janv. 2009 20:39
par jl56
bonjour

Au risque de passer ridicule ( mais ça ne tue pas ) et je préfère savoir et apprendre

quel est intérêt de créer une dll au lieu d'un script

Avez vous un exemple pour expliquer ce choix de dll

Ne répondez pas si mes questions sont trop nul

A+ JL56

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : sam. 17 janv. 2009 21:41
par Tlem
J'espère que je vais donner une réponse assez claire pour que le doute ne subsiste plus. :roll:

L'intérêt d'une DLL de ressource est tout simplement la centralisation de ressources utilisables dans un ou plusieurs scripts compilés et la facilité de son utilisation.

Pour exemple, si vous décidez d'avoir un logo particulier, ce logo une fois compilé dans l'exécutable ne peut être modifié sans re-compilation...
Or si cette ressource ce trouve dans une DLL, il suffit de mettre à jour celle-ci pour que le logo soit automatiquement mis à jour.
De plus si une de vos ressources est de taille conséquente, et est utilisées par plusieurs de vos scripts compilés, vous gagné en taille sur les scripts en centralisant cette ressource dans un seul fichier.
Ensuite, comme autre avantage, vous n'avez plus besoin d'extraire une image de votre programme pour l'afficher dans la GUI (Certes vous pouvez aussi utiliser l'UDF ressource.au3 pour exploiter une image compilée avec votre script mais c'est à mon avis un chouilla plus compliqué).

Enfin voilà je pense avoir fait le plus gros des avantages d'une DLL de ressource ... 8)

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : dim. 18 janv. 2009 10:03
par jl56
Bonjour Tlem

Merci pour ta réponse

Effectivement je n'avais pas compris au vue de certain poste j'avais émis l'hypothèse que la dll
remplaçait le script.

Merci d'avoir clarifié ce point

A+ JL56

Re: [Tuto] Création d'une dll de ressources pour votre script.

Posté : ven. 11 déc. 2009 20:40
par federico
Merci pour ce tuto très clair !!!

J'ai cependant une petite question.

J'ai crée un soft avec autoit qui est payant, mais des petits malins ont trouvé le moyen de décompiler (assez facile en cherchant sur google) mon soft et du coup ils ont enlevés les protections de sécurité.

Je voudrais donc exporter les fonctions de sécurité (check de key) dans une DLL et appeller ma DLL à partir de mon exe.

J'ai bien pensé au fait qu'ils allaient aussi faire sauter les appels à la DLL mais je vais ajouter d'autres fonctions vitale de mon programme dans ma DLL.

Ca m'emmene donc à ma question :
- Est ce qu'une DLL crée avec autoit est aussi facilement décompilable et reversible qu'un simple exe ?

Merci pour votre réponse,