Verrouille la ressource spécifié dans la mémoire
#include <WinAPIRes.au3>
_WinAPI_LockResource ( $hData )
$hData | Handle de la ressource qui doit être verrouillée. La fonction _WinAPI_LoadResource() retourne ce handle. Ne passez pas des valeurs autres que les valeurs de retour avec succès de la fonction LoadResource. |
Succès: | Retourne le pointeur sur le premier octet de la ressource. |
Échec: | Retourne 0. |
Le pointeur retourné par cette fonction est valide jusqu'à ce que le module contenant la ressource soit déchargé. Ce n'est pas nécessaire de débloquer les ressources parce que le système les supprime automatiquement lorsque le processus qui les a créé se termine.
N'essayez pas de verrouiller une ressource en utilisant le handle retourné par la fonction _WinAPI_FindResource() ou _WinAPI_FindResourceEx(). Ce handle pointe sur des données aléatoires.
Notez que _WinAPI_LockResource() ne verrouille pas la mémoire; elle est seulement utilisée pour obtenir un pointeur sur la mémoire contenant les données de ressource. Le nom de la fonction vient de versions antérieures à Windows XP, quand elle était utilisée pour verrouiller un bloc de mémoire globale alloué par _WinAPI_LoadResource().
_WinAPI_FindResource, _WinAPI_FindResourceEx, _WinAPI_LoadResource, _WinAPI_UnlockFile
Consultez LockResource 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)