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 )
$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. |
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. |
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().
_WinAPI_LoadResource, _WinAPI_LockResource
Consultez FindResource dans la librairie MSDN.
#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)