UDF > WinAPIEx > Menus & Resources > Resources >


_WinAPI_FindResource

Détermine l'emplacement d'une ressource avec le type et le nom spécifié dans le module spécifié

#include <WinAPIRes.au3>
_WinAPI_FindResource ( $hInstance, $sType, $sName )

Paramètres

$hInstance Handle du module dont le fichier exécutable contient la ressource.
Une valeur de 0 désigne le handle du module associé au fichier de l'image que le système d'exploitation a utilisé pour créer le processus courant.
$sType Le type de la ressource. Ce paramètre peut être une chaîne ou une valeur entière.
$sName Le nom de la ressource. Ce paramètre peut être une chaîne ou une valeur entière.

Valeur de retour

Succès: Retourne le handle du bloc d'information de la ressource spécifiée.
Pour obtenir le handle de la ressource, passer ce handle à la fonction _WinAPI_LoadResource().
Échec: Retourne 0, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur.

Remarques

Si le premier caractère du paramètre chaîne $sName ou $sType est un signe dièse (#), les caractères restants représentent un nombre décimal qui spécifie l'identifiant entier du nom ou du type de la ressource.
Par exemple, la chaîne "#258" représente l'identifiant entier 258.

Pour réduire la quantité de mémoire nécessaire pour une ressource, une application doit s'y référer par un identifiant entier plutôt que par nom.

Une application peut utiliser _WinAPI_FindResource() pour trouver n'importe quel type de ressource, mais cette fonction doit être utilisée uniquement si l'application doit accéder aux données de la ressource binaire lors des appels ultérieurs à _WinAPI_LockResource().

En relation

_WinAPI_LoadResource, _WinAPI_LockResource

Voir aussi

Consultez FindResource dans la librairie MSDN.

Exemple

#include <APIMiscConstants.au3>
#include <APIResConstants.au3>
#include <GUIConstantsEx.au3>
#include <Memory.au3>
#include <MsgBoxConstants.au3>
#include <StaticConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPIMisc.au3>
#include <WinAPIRes.au3>

Local Const $sJpg = @TempDir & '\~Tech.jpg'

; Charge Resources.dll en mémoire
Local $hInstance = _WinAPI_LoadLibraryEx(@ScriptDir & '\Extras\Resources.dll', $LOAD_LIBRARY_AS_DATAFILE)
If Not $hInstance Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', @ScriptDir & '\Extras\Resources.dll est absent.')
    Exit
EndIf

; Charge les ressources JPEG de la bibliothèque Resources.dll
Local $hResource = _WinAPI_FindResource($hInstance, 'JPEG', 1)
Local $iSize = _WinAPI_SizeOfResource($hInstance, $hResource)
Local $hData = _WinAPI_LoadResource($hInstance, $hResource)
Local $pData = _WinAPI_LockResource($hData)

; Enregistre la ressource du fichier .jpg
Local $hFile = FileOpen($sJpg, 2 + 16)
Local $tData = DllStructCreate('byte[' & $iSize & ']', $pData)
FileWrite($hFile, DllStructGetData($tData, 1))
FileClose($hFile)

; Charge une ressource FONT de la bibliothèque Resources.dll
$hResource = _WinAPI_FindResource($hInstance, $RT_FONT, 'TECHNOVIA_CAPS')
$iSize = _WinAPI_SizeOfResource($hInstance, $hResource)
$hData = _WinAPI_LoadResource($hInstance, $hResource)
$pData = _WinAPI_LockResource($hData)

; Ajoute la police en mémoire au système
Local $hFont = _WinAPI_AddFontMemResourceEx($pData, $iSize)

; Charge une ressource SOUND de la bibliothèque Resources.dll
$hResource = _WinAPI_FindResource($hInstance, 'SOUND', 1)
$iSize = _WinAPI_SizeOfResource($hInstance, $hResource)
$hData = _WinAPI_LoadResource($hInstance, $hResource)
$pData = _WinAPI_LockResource($hData)

; Copie WAV en mémoire pour une utilisation ultérieure
Local $hWave = _MemGlobalAlloc($iSize, $GMEM_MOVEABLE)
Local $pWave = _MemGlobalLock($hWave)
_MemMoveMemory($pData, $pWave, $iSize)
; _MemGlobalUnlock ($HWave)

; Charge une ressource STRING de la bibliothèque Resources.dll
Local $sText = _WinAPI_LoadString($hInstance, 1)

; Décharge Resources.dll de la mémoire
_WinAPI_FreeLibrary($hInstance)

; Crée une GUI
GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 350, 350)
GUICtrlCreatePic($sJpg, 0, 0, 350, 350)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateLabel($sText, 10, 18, 330, 36, $SS_CENTER)
GUICtrlSetFont(-1, 30, -1, -1, 'Technovia Caps')
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xF06000)
Local $idButton = GUICtrlCreateButton('Play Sound', 125, 316, 100, 23)
GUISetState(@SW_SHOW)

Local $iMsg
Do
    $iMsg = GUIGetMsg()
    If $iMsg = $idButton Then 
        _WinAPI_PlaySound($pWave, BitOR($SND_ASYNC, $SND_MEMORY, $SND_NOWAIT))
    EndIf
Until $iMsg = $GUI_EVENT_CLOSE

; Libère les ressources
_WinAPI_RemoveFontMemResourceEx($hFont)
FileDelete($sJpg)