OVH Cloud OVH Cloud

fichier resource

3 réponses
Avatar
houbahop2003
Bonjour,
J'ai compilé un fichier res qui contient des fichiers gif utiles a mon
appli.
Je sais extraire les fichiers car je connais leur identifiant.

Ce que j'aimerais faire pour plus de souplesse, c'est de pouvoir lister le
contenu d'un fichier ressource afin de pouvoir tout extraire dans une
boucle.

Savez vous comment voir le contenu d'un fichier ressource dans vb?

Merci,

Dominique.

3 réponses

Avatar
François Picalausa
Hello,

Tu peux extraire les ressource à partir du fichier compilé par APIs:
'Sur une Form, Form1, avec un listbox, list1
'Drag & dropper un exe
Option Explicit

Private Declare Function LoadLibrary _
Lib "kernel32" _
Alias "LoadLibraryA" _
( _
ByVal lpLibFileName As String _
) _
As Long
Private Declare Function FreeLibrary _
Lib "kernel32" _
( _
ByVal hLibModule As Long _
) _
As Long

Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As
Integer, Shift As Integer, X As Single, Y As Single)
List1.Clear
If Data.GetFormat(vbCFFiles) Then
Dim hMod As Long
hMod = LoadLibrary(Data.Files(1))
EnumResourceTypes hMod, AddressOf EnumResTypeProc, 0
FreeLibrary hMod
End If
End Sub

'Dans un module standard
Option Explicit

Public Declare Function EnumResourceTypes _
Lib "kernel32" _
Alias "EnumResourceTypesA" _
( _
ByVal hModule As Long, _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long _
) _
As Long
Public Declare Function EnumResourceNames _
Lib "kernel32" _
Alias "EnumResourceNamesA" _
( _
ByVal hModule As Long, _
ByVal lpType As Long, _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long _
) _
As Long
Public Declare Function EnumResourceLanguages _
Lib "kernel32" _
Alias "EnumResourceLanguagesA" _
( _
ByVal hModule As Long, _
ByVal lpType As Long, _
ByVal lpName As Long, _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long _
) _
As Long

Private Types() As Long

Public Function EnumResTypeProc(ByVal hModule As Long, ByVal lpszType As
Long, ByVal lParam As Long) As Long
Form1.List1.AddItem lpszType & " " & modPEStructs.RTToString(lpszType)

EnumResourceNames hModule, lpszType, AddressOf EnumResNameProc, 0
EnumResTypeProc = 1
End Function

Public Function EnumResNameProc(ByVal hModule As Long, ByVal lpszType As
Long, ByVal lpszName As Long, ByVal lParam As Long) As Long
Form1.List1.AddItem " " & lpszName

EnumResourceLanguages hModule, lpszType, lpszName, AddressOf
EnumResLangProc, 0

EnumResNameProc = 1
End Function

Public Function EnumResLangProc(ByVal hModule As Long, ByVal lpszType As
Long, ByVal lpszName As Long, ByVal wIDLanguage As Integer, ByVal lParam As
Long) As Long
Form1.List1.AddItem " " & wIDLanguage
End Function

Ceci liste *toutes* les ressources contenues. Ici, comme tu connais le type
de la ressources, tu pourrais directement appeler
EnumResourceNames hModule, lpszType, AddressOf EnumResNameProc, 0
Note que lpType et lpName peuvent être déclarée comme Byval As String, en
fonction de ce dont tu as besoin.
Pour les fichiers ressources c'est un peu plus compliqué, mais normalement
le .res n'est pas redistribué avec l'application!

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"houbahop2003" a écrit dans le message de
news:ch82jg$ohs$
J'ai compilé un fichier res qui contient des fichiers gif utiles a mon
appli.
Je sais extraire les fichiers car je connais leur identifiant.

Ce que j'aimerais faire pour plus de souplesse, c'est de pouvoir
lister le contenu d'un fichier ressource afin de pouvoir tout
extraire dans une boucle.


Avatar
François Picalausa
Hello,

Effectivement, c'est une déclaration que j'ai oubliée...
Dans modPEStructs
Enum RT
RT_CURSOR = 1
RT_BITMAP = 2
RT_ICON = 3
RT_MENU = 4
RT_DIALOG = 5
RT_STRING = 6
RT_FONTDIR = 7
RT_FONT = 8
RT_ACCELERATOR = 9
RT_RCDATA = 10
RT_MESSAGETABLE = 11

DIFFERENCE = 11

RT_GROUP_CURSOR = RT_CURSOR + DIFFERENCE
RT_GROUP_ICON = RT_ICON + DIFFERENCE
RT_VERSION = 16
RT_DLGINCLUDE = 17
RT_PLUGPLAY = 19
RT_VXD = 20
RT_ANICURSOR = 21
RT_ANIICON = 22
RT_HTML = 23
RT_MANIFEST = 24
End Enum

Public Function RTToString(ResType As RT) As String
RTToString = ""

Select Case ResType
Case RT_CURSOR
RTToString = "RT_CURSOR"
Case RT_BITMAP
RTToString = "RT_BITMAP"
Case RT_ICON
RTToString = "RT_ICON"
Case RT_MENU
RTToString = "RT_MENU"
Case RT_DIALOG
RTToString = "RT_DIALOG"
Case RT_STRING
RTToString = "RT_STRING"
Case RT_FONTDIR
RTToString = "RT_FONTDIR"
Case RT_FONT
RTToString = "RT_FONT"
Case RT_ACCELERATOR
RTToString = "RT_ACCELERATOR"
Case RT_RCDATA
RTToString = "RT_RCDATA"
Case RT_MESSAGETABLE
RTToString = "RT_MESSAGETABLE"
Case RT_GROUP_CURSOR
RTToString = "RT_GROUP_CURSOR"
Case RT_GROUP_ICON
RTToString = "RT_GROUP_ICON"
Case RT_VERSION
RTToString = "RT_VERSION"
Case RT_DLGINCLUDE
RTToString = "RT_DLGINCLUDE"
Case RT_PLUGPLAY
RTToString = "RT_PLUGPLAY"
Case RT_VXD
RTToString = "RT_VXD"
Case RT_ANICURSOR
RTToString = "RT_ANICURSOR"
Case RT_ANIICON
RTToString = "RT_ANIICON"
Case RT_HTML
RTToString = "RT_HTML"
Case RT_MANIFEST
RTToString = "RT_MANIFEST"
End Select
End Function

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"houbahop2003" a écrit dans le message de
news:ch9gg6$nig$
Bonjour,
Merci, ca a l'air d'etre ce dont j'ai besoin, mais je crois qu'il
manque une déclaration :


modPEStructs n'est pas connu.

Public Function EnumResTypeProc(ByVal hModule As Long, ByVal lpszType
As Long, ByVal lParam As Long) As Long
Form1.List1.AddItem lpszType & " " &
modPEStructs.RTToString(lpszType)

EnumResourceNames hModule, lpszType, AddressOf EnumResNameProc, 0
EnumResTypeProc = 1
End Function


Avatar
houbahop2003
Bonjour,
Merci, ca a l'air d'etre ce dont j'ai besoin, mais je crois qu'il manque une
déclaration :


modPEStructs n'est pas connu.

Public Function EnumResTypeProc(ByVal hModule As Long, ByVal lpszType As
Long, ByVal lParam As Long) As Long
Form1.List1.AddItem lpszType & " " & modPEStructs.RTToString(lpszType)

EnumResourceNames hModule, lpszType, AddressOf EnumResNameProc, 0
EnumResTypeProc = 1
End Function

Dominique.


"François Picalausa" a écrit dans le message de news:

Hello,

Tu peux extraire les ressource à partir du fichier compilé par APIs:
'Sur une Form, Form1, avec un listbox, list1
'Drag & dropper un exe
Option Explicit

Private Declare Function LoadLibrary _
Lib "kernel32" _
Alias "LoadLibraryA" _
( _
ByVal lpLibFileName As String _
) _
As Long
Private Declare Function FreeLibrary _
Lib "kernel32" _
( _
ByVal hLibModule As Long _
) _
As Long

Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As
Integer, Shift As Integer, X As Single, Y As Single)
List1.Clear
If Data.GetFormat(vbCFFiles) Then
Dim hMod As Long
hMod = LoadLibrary(Data.Files(1))
EnumResourceTypes hMod, AddressOf EnumResTypeProc, 0
FreeLibrary hMod
End If
End Sub

'Dans un module standard
Option Explicit

Public Declare Function EnumResourceTypes _
Lib "kernel32" _
Alias "EnumResourceTypesA" _
( _
ByVal hModule As Long, _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long _
) _
As Long
Public Declare Function EnumResourceNames _
Lib "kernel32" _
Alias "EnumResourceNamesA" _
( _
ByVal hModule As Long, _
ByVal lpType As Long, _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long _
) _
As Long
Public Declare Function EnumResourceLanguages _
Lib "kernel32" _
Alias "EnumResourceLanguagesA" _
( _
ByVal hModule As Long, _
ByVal lpType As Long, _
ByVal lpName As Long, _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long _
) _
As Long

Private Types() As Long

Public Function EnumResTypeProc(ByVal hModule As Long, ByVal lpszType As
Long, ByVal lParam As Long) As Long
Form1.List1.AddItem lpszType & " " & modPEStructs.RTToString(lpszType)

EnumResourceNames hModule, lpszType, AddressOf EnumResNameProc, 0
EnumResTypeProc = 1
End Function

Public Function EnumResNameProc(ByVal hModule As Long, ByVal lpszType As
Long, ByVal lpszName As Long, ByVal lParam As Long) As Long
Form1.List1.AddItem " " & lpszName

EnumResourceLanguages hModule, lpszType, lpszName, AddressOf
EnumResLangProc, 0

EnumResNameProc = 1
End Function

Public Function EnumResLangProc(ByVal hModule As Long, ByVal lpszType As
Long, ByVal lpszName As Long, ByVal wIDLanguage As Integer, ByVal lParam


As
Long) As Long
Form1.List1.AddItem " " & wIDLanguage
End Function

Ceci liste *toutes* les ressources contenues. Ici, comme tu connais le


type
de la ressources, tu pourrais directement appeler
EnumResourceNames hModule, lpszType, AddressOf EnumResNameProc, 0
Note que lpType et lpName peuvent être déclarée comme Byval As String, en
fonction de ce dont tu as besoin.
Pour les fichiers ressources c'est un peu plus compliqué, mais normalement
le .res n'est pas redistribué avec l'application!

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"houbahop2003" a écrit dans le message de
news:ch82jg$ohs$
> J'ai compilé un fichier res qui contient des fichiers gif utiles a mon
> appli.
> Je sais extraire les fichiers car je connais leur identifiant.
>
> Ce que j'aimerais faire pour plus de souplesse, c'est de pouvoir
> lister le contenu d'un fichier ressource afin de pouvoir tout
> extraire dans une boucle.