Section courante

A propos

Section administrative du site

Introduction

Le format de fichier RES, est un fichier de ressource Windows. Le fichier .RES est produit par la compilation d'un fichier .RC avec la commande RC.

Spécification

Spécification Description
Type Ressource
Plateforme Windows
Version Version 16 bits (Windows 3.x, Borland Pascal, Turbo Pascal pour Windows) :
  • Format « RES 16 bits » (aussi appelé format NE Resource)
  • Utilisé par : Windows 3.0, Windows 3.1, Windows 3.11
  • Compilateurs : Borland Pascal 7.x, Turbo Pascal pour Windows, BC++ 3.x

Version 32 bits (Windows NT, Windows 9x et suivants) :
  • Format « RES 32 bits » (aussi appelé format PE Resource)
  • Utilisé par : Windows NT 3.1+, Windows 95+, Windows 2000+, XP, Vista, 7+
  • Compilateurs : MSVC, Borland C++, Delphi, Free Pascal (windres),...

Structure du fichier .RES 16 bits (Windows 3.x / Borland Pascal)

Le fichier .RES 16 bits est une séquence de ressources individuelles, chacune précédée d'un en-tête.

Entête d'une ressource 16 bits

Déplacement Taille Description
0 2 Type de ressource (WORD) - voir table des types ci-dessous :
Si bit 15 = 1 : identifiant numérique (0x8000 | ID)
Si bit 15 = 0 : offset vers une chaîne de nom (pascal string)
2 2 Identifiant de la ressource (WORD) :
Si bit 15 = 1 : identifiant numérique (0x8000 | ID)
Si bit 15 = 0 : offset vers une chaîne de nom (pascal string)
4 4 Taille des données de la ressource en octets (DWORD)
8 2 Attributs (WORD) - voir table des attributs ci-dessous
10 2 Réservé (WORD) - doit être 0
12 2 Longueur du nom de la ressource (WORD, optionnel)
14 N Données de la ressource (alignées sur 2 octets)

Note : Les chaînes de type/nom sont des Pascal strings (1 octet longueur suivi des caractères). Alignement sur 2 octets après chaque entrée.

Structure globale du fichier .RES 16 bits

[Ressource 1 : En-tête + Données]
[Ressource 2 : En-tête + Données]
...
[Ressource N : En-tête + Données]
[Marqueur de fin : WORD 0x0000]

Structure du fichier .RES 32 bits (Windows NT/9x et suivants)

Le fichier .RES 32 bits commence toujours par une ressource nulle (32 octets), puis est suivi d'une séquence de ressources individuelles.

Ressource nulle (Entête de fichier - 32 octets)

Déplacement Taille Description
0 4 DataSize = 0x00000000 (DWORD) - taille données = 0
4 4 HeaderSize = 0x00000020 (DWORD) - taille en-tête = 32
8 4 Type = 0x0000FFFF (DWORD) - type nul (0xFFFF)
12 4 Name = 0x0000FFFF (DWORD) - nom nul (0xFFFF)
16 4 DataVersion = 0x00000000 (DWORD)
20 2 MemoryFlags = 0x0000 (WORD)
22 2 LanguageId = 0x0000 (WORD) - langue neutre
24 4 Version = 0x00000000 (DWORD)
28 4 Characteristics = 0x00000000 (DWORD)

Entête d'une ressource 32 bits (RESHEADER)

Déplacement Taille Type Description
0 4 DWORD DataSize - Taille des données en octets
4 4 DWORD HeaderSize - Taille de l'en-tête (variable)
8 ? WORD[] Type - Type de la ressource :
Si 0xFFFF suivi de WORD : ID numérique
Sinon : chaîne Unicode terminée par \0
? ? WORD[] Name - Nom/ID de la ressource
Même encodage que Type
? 0-2 BYTE[] Padding - Alignement sur 4 octets
? 4 DWORD DataVersion - Version (généralement 0)
? 2 WORD MemoryFlags - Attributs mémoire
? 2 WORD LanguageId - Identifiant de langue (LCID)
? 4 DWORD Version - Version définie par l'utilisateur
? 4 DWORD Characteristics - Défini par l'utilisateur

[Données de la ressource - DataSize octets]

[Padding - alignement sur 4 octets]

Encodage du type et du nom (32 bits)

Cas 1 - Identifiant numérique :

WORD 0xFFFF
WORD <id> (exemple : 0xFFFF 0x0003 = RT_ICON avec ID 3)

Cas 2 - Chaîne Unicode :

WCHAR[] <nom> (chaîne Unicode UTF-16LE terminée par WCHAR 0x0000)

Types de ressources standards (RT_*)

Valeur Nom symbolique Description
1 RT_CURSOR Curseur (16x16 ou 32x32, format AND/XOR)
2 RT_BITMAP Bitmap (BITMAPINFOHEADER + données pixels)
3 RT_ICON Icône (format DIB)
4 RT_MENU Menu (MENUTEMPLATE ou MENUEX)
5 RT_DIALOG Boîte de dialogue (DLGTEMPLATE ou DLGTEMPLATEEX)
6 RT_STRING Table de chaînes (blocs de 16 chaînes Unicode)
7 RT_FONTDIR Répertoire de polices de caractères
8 RT_FONT Police de caractères
9 RT_ACCELERATOR Table des accélérateurs clavier
10 RT_RCDATA Données binaires arbitraires
11 RT_MESSAGETABLE Table de messages (format MESSAGE_RESOURCE_DATA)
12 RT_GROUP_CURSOR Répertoire de groupe de curseurs
14 RT_GROUP_ICON Répertoire de groupe d'icônes
16 RT_VERSION Informations de version (VS_VERSIONINFO)
17 RT_DLGINCLUDE Fichier include de boîte de dialogue
19 RT_PLUGPLAY Plug and Play
20 RT_VXD VxD (pilote virtuel)
21 RT_ANICURSOR Curseur animé
22 RT_ANIICON Icône animée
23 RT_HTML Page HTML embarquée
24 RT_MANIFEST Manifeste d'assembly (XML)
241 RT_TOOLBAR Barre d'outils (Borland/Delphi spécifique)

Attributs mémoire (MemoryFlags / WORD)

Bit(s) Constante Valeur Description
0 MOVEABLE 0x0010 Ressource peut être déplacée en mémoire
1 PURE 0x0020 Ressource pure (peut être jetée)
2 PRELOAD 0x0040 Chargée au démarrage de l'application
3 DISCARDABLE 0x1000 Ressource jetable (libérable par Windows)
- (16 bits seulement)
FIXED
0x0000 Ressource fixe en mémoire (non MOVEABLE)

Exemples typiques :

  1. 0x0030 = MOVEABLE | PURE
  2. 0x0050 = MOVEABLE | PRELOAD
  3. 0x1030 = MOVEABLE | PURE | DISCARDABLE

Identifiants de langue (LanguageId - LCID partiel)

Valeur Description
0x0000 LANG_NEUTRAL / SUBLANG_NEUTRAL (langue neutre)
0x0409 Anglais (États-Unis)
0x0809 Anglais (Royaume-Uni)
0x040C Français (France)
0x080C Français (Belgique)
0x0C0C Français (Canada)
0x0407 Allemand (Allemagne)
0x0410 Italien (Italie)
0x0C0A Espagnol (Espagne, moderne)
0x0416 Portugais (Brésil)
0x0816 Portugais (Portugal)
0x0419 Russe
0x0411 Japonais
0x0804 Chinois (simplifié)
0x0404 Chinois (traditionnel)

Détail des ressources courantes

RT_STRING (type 6) - Table de chaînes

Les chaînes sont regroupées en blocs de 16 (IDs consécutifs). Le bloc contenant l'ID N se trouve dans la ressource d'ID (N div 16) + 1.

Structure d'un bloc de chaînes :

Pour chaque entrée i = 0 à 15 :

RT_ACCELERATOR (type 9) - Table des accélérateurs

Structure d'une entrée (8 octets, 32 bits) :

Définition Description
WORD fVirt Drapeaux (voir ci-dessous)
WORD key Code de touche virtuelle ou caractère ASCII
WORD cmd Identifiant de commande (WM_COMMAND wParam)
WORD Padding - Réservé (= 0)

Drapeaux fVirt :

Définition Description
FVIRTKEY = 0x01 key est un code de touche virtuelle (VK_*)
FNOINVERT = 0x02 Ne pas inverser la barre de menu
FSHIFT = 0x04 Touche Shift requise
FCONTROL = 0x08 Touche Ctrl requise
FALT = 0x10 Touche Alt requise
0x80 = Dernier accélérateur du tableau (bit de fin)

RT_MENU (type 4) - Menu standard (16 et 32 bits)

Entête MENUTEMPLATE :

Définition Description
WORD wVersion = 0 (menu standard) ou 1 (menu étendu MENUEX)
WORD cbHeaderSize = 4 (pour wVersion = 0)

Chaque élément de menu :

Définition Description
WORD fItemFlags Drapeaux (voir ci-dessous)
WORD wMenuID Identifiant de commande (0 pour sous-menu)
WCHAR[] szItemText Texte Unicode terminé par \0

Drapeaux fItemFlags :

Définition Description
MF_GRAYED = 0x0001 Grisé
MF_DISABLED = 0x0002 Désactivé
MF_BITMAP = 0x0008 Bitmap
MF_CHECKED = 0x0010 Coché
MF_POPUP = 0x0020 Sous-menu (popup)
MF_MENUBARBREAK = 0x0040 Séparateur avec barre
MF_MENUBREAK = 0x0080 Séparateur sans barre
MF_SEPARATOR = 0x0800 Séparateur horizontal
MF_END = 0x0080 Dernier élément du niveau courant

RT_DIALOG (type 5) - Boîte de dialogue (DLGTEMPLATE)

Entête DLGTEMPLATE (18 octets) :

Définition Description
DWORD style Styles de fenêtre (WS_* | DS_*)
DWORD dwExtendedStyle Styles étendus (WS_EX_*)
WORD cdit Nombre de contrôles
short x, y Position (unités de dialogue)
short cx, cy Dimensions (unités de dialogue)

Suivi de :

Définition Description
WCHAR[] menu Nom/ID du menu (ou 0x0000 = aucun, 0xFFFF ID)
WCHAR[] windowClass Classe de fenêtre (ou 0x0000 = défaut "DIALOG")
WCHAR[] title Titre de la boîte de dialogue

[Si style & DS_SETFONT :]

Définition Description
WORD pointSize Taille de la police (en points)
WCHAR[] typeface Nom de la police de caractères (exemple "MS Sans Serif")

Chaque contrôle DLGITEMTEMPLATE :

(Aligné sur 4 octets)

Définition Description
DWORD style Style
DWORD dwExtendedStyle Style étendue
short x, y, cx, cy Position
WORD id Identificateur
WCHAR[] windowClass Classe ou atom prédéfini (0xFFFF + WORD)
WCHAR[] title Texte ou ID
WORD extraCount Taille des données supplémentaires (généralement 0)

Classes prédéfinies (atom) pour les contrôles :

Définition Description
BUTTON = 0x0080 Bouton
EDIT = 0x0081 Editeur
STATIC = 0x0082 Statique
LISTBOX = 0x0083 Boite de liste
SCROLLBAR = 0x0084 Barre de défilement
COMBOBOX = 0x0085 Liste déroulante

RT_VERSION (type 16) - Informations de version (VS_VERSIONINFO)

Structure VS_VERSIONINFO :

Définition Description
WORD wLength Taille totale de VS_VERSIONINFO
WORD wValueLength Taille de VS_FIXEDFILEINFO (= 52)
WORD wType = 0 (données binaires)
WCHAR[] szKey = L"VS_VERSION_INFO" (terminé par \0) Clef

[Padding pour alignement DWORD]

VS_FIXEDFILEINFO (52 octets) :

Définition Description
DWORD dwSignature = 0xFEEF04BD Signature
DWORD dwStrucVersion = 0x00010000 Version de la structure
DWORD dwFileVersionMS Version majeure/mineure (ex. 0x00010002)
DWORD dwFileVersionLS Build/révision
DWORD dwProductVersionMS Version de produit haute
DWORD dwProductVersionLS Version de produit basse
DWORD dwFileFlagsMask Masque de drapeaux de fichiers
DWORD dwFileFlags VS_FF_DEBUG, VS_FF_PRERELEASE,...
DWORD dwFileOS VOS_NT, VOS_WINDOWS32,...
DWORD dwFileType VFT_APP, VFT_DLL, VFT_DRV,...
DWORD dwFileSubtype Sous-type de fichier
DWORD dwFileDateMS Date de fichier haute
DWORD dwFileDateLS Date de fichier basse

[Padding pour alignement DWORD]

[StringFileInfo et/ou VarFileInfo - structures imbriquées]

RT_BITMAP (type 2) - Bitmap

Les données correspondent à un BITMAPINFOHEADER suivi des pixels. L'entête BITMAPFILEHEADER (14 octets) est absent dans les ressources.

BITMAPINFOHEADER (40 octets) :

Définition Description
DWORD biSize = 40 Taille
LONG biWidth Largeur en pixels
LONG biHeight Hauteur (positif = bottom-up, négatif = top-down)
WORD biPlanes = 1 Plan
WORD biBitCount Bits par pixel (1, 4, 8, 16, 24, 32)
DWORD biCompression BI_RGB(0), BI_RLE8(1), BI_RLE4(2), BI_BITFIELDS(3)
DWORD biSizeImage Taille des données pixels (0 si BI_RGB)
LONG biXPelsPerMeter Pixel X par mètre
LONG biYPelsPerMeter Pixel Y par mètre
DWORD biClrUsed Entrées dans la palette (0 = max)
DWORD biClrImportant Efface

[Table de couleurs RGBQUAD[] si biBitCount <= 8]

[Données pixels]

RT_ICON / RT_GROUP_ICON (types 3 et 14) - Icône

RT_ICON : une seule image DIB (format BITMAPINFOHEADER, sans BITMAPFILEHEADER) avec le masque AND en fin de données.

RT_GROUP_ICON : répertoire listant toutes les variantes de l'icône.

Structure GRPICONDIR :

Définition Description
WORD idReserved = 0 Réservé
WORD idType = 1 (icône) ou 2 (curseur)
WORD idCount Nombre d'images

Pour chaque image (GRPICONDIRENTRY, 14 octets) :

Définition Description
BYTE bWidth Largeur (0 = 256)
BYTE bHeight Hauteur (0 = 256)
BYTE bColorCount Nombre de couleurs (0 si >= 8 bpp)
BYTE bReserved = 0 Réservé
WORD wPlanes Nombres de plans
WORD wBitCount Bits par pixel
DWORD dwBytesInRes Taille des données de l'image RT_ICON
WORD nId ID de la ressource RT_ICON correspondante

RT_CURSOR / RT_GROUP_CURSOR (types 1 et 12) - Curseur

Similaire aux icônes mais idType = 2 dans le répertoire de groupe.

Chaque RT_CURSOR contient :

Définition Description
WORD xHotspot Point d'accroche horizontal
WORD yHotspot Point d'accroche vertical

[Données DIB (BITMAPINFOHEADER + pixels AND/XOR)]

RT_RCDATA (type 10) - Données binaires arbitraires

Données brutes quelconques. Aucune structure imposée. Utilisé pour embarquer des fichiers, tables, etc.

RT_MANIFEST (type 24) - Manifeste d'assembly

Données XML UTF-8 (ou UTF-16) décrivant les dépendances de l'application (Common Controls 6.0, version de l'assembly, niveau d'exécution UAC,...).

IDs de nom conventionnels :

Alignement et règles d'encodage

Format 16 bits :

Format 32 bits :

Exemple de script ressource (.RC) et son équivalent binaire (.RES)

Exemple de fichier .RC :

  1.   #include <windows.h>
  2.  
  3.   IDI_MAINICON  ICON    "appicon.ico"
  4.   IDR_MENU1     MENU
  5.   BEGIN
  6.     POPUP "&Fichier"
  7.     BEGIN
  8.       MENUITEM "&Nouveau\tCtrl+N",  ID_FILE_NEW
  9.       MENUITEM "&Ouvrir...\tCtrl+O", ID_FILE_OPEN
  10.       MENUITEM SEPARATOR
  11.       MENUITEM "&Quitter",           ID_FILE_EXIT
  12.     END
  13.   END
  14.  
  15.   VS_VERSION_INFO VERSIONINFO
  16.     FILEVERSION    1,0,0,0
  17.     PRODUCTVERSION 1,0,0,0
  18.     FILEFLAGSMASK  VS_FFI_FILEFLAGSMASK
  19.     FILEFLAGS      0
  20.     FILEOS         VOS_NT_WINDOWS32
  21.     FILETYPE       VFT_APP
  22.     FILESUBTYPE    VFT_UNKNOWN
  23.   BEGIN
  24.     BLOCK "StringFileInfo"
  25.     BEGIN
  26.       BLOCK "040C04B0"
  27.       BEGIN
  28.         VALUE "CompanyName",      "Mon Entreprise"
  29.         VALUE "FileDescription",  "Mon Application"
  30.         VALUE "FileVersion",      "1.0.0.0"
  31.         VALUE "ProductName",      "MonApp"
  32.         VALUE "ProductVersion",   "1.0.0.0"
  33.       END
  34.     END
  35.     BLOCK "VarFileInfo"
  36.     BEGIN
  37.       VALUE "Translation", 0x040C, 0x04B0
  38.     END
  39.   END

Compilation :

rc ressource.rc
-> produit : ressource.res

Utilisation avec Borland Pascal / Turbo Pascal pour Windows :

  1. {$R RESSOURCE.RES}

Utilisation avec Free Pascal / Lazarus :

  1. {$R ressource.res}

ou via windres : windres ressource.rc -O coff -o ressource.res

Outils associés

Compilateurs de ressources :

Programme Description
rc.exe Microsoft Resource Compiler (MSVC, SDK Windows)
brcc.exe Borland Resource Compiler (Borland C++, Delphi)
brcc32.exe Borland Resource Compiler 32 bits (Delphi, C++Builder)
windres.exe GNU Resource Compiler (MinGW, Cygwin, Free Pascal)
gorc.exe GOASM Resource Compiler

Éditeurs / Visualiseurs de ressources :

Nom Description
Resource Hacker Éditeur de ressources (freeware, Windows)
ResEdit Éditeur de ressources (freeware)
XN Resource Editor PE Explorer

Extensions de fichier associées :

Extension Description
.RC Script source de ressources (texte)
.RES Ressources compilées (binaire)
.DLL Bibliothèque dynamique (contient des ressources PE)
.EXE Exécutable Windows (contient des ressources PE)

Code source

Voici des exemples de code source d'utilitaires pour manipuler les .RES :

Lien Langage de programmation Description Projet Syntaxe
DISRES.PAS Free Pascal Cette commande permet de lancer le désassembleur de fichiers .RES (ressources Windows) vers .RC DEV-COOLS DISRES
RC.PAS Free Pascal Cette commande permet de lancer le compilateur de ressources Windows (.RC -> .RES). DEV-COOLS RC


Dernière mise à jour : Mercredi, le 1er avril 2026