Fügt die Schriftartenressource von einem Speicherabbild zum System hinzu
#include <WinAPIGdi.au3>
_WinAPI_AddFontMemResourceEx ( $pData, $iSize )
$pData | Der Zeiger zur Schriftartenressource. |
$iSize | Die Anzahl an Bytes in der Schriftartenressource. |
Erfolg: | Das Handle identifiziert eindeutig die Schriftarten welche auf dem System installiert worden sind. @extended beinhaltet die Anzahl an Schriftarten welche mit diesem Funktionsaufruf zum System hinzugefügt worden sind. |
Fehler: | 0. |
Diese Funktion erlaubt es einer Anwendung eine Schriftart zu holen welche in einem Dokument oder einer Website eingebettet ist.
Eine Schriftart welche durch diese Funktion hinzugefügt wurde ist immer privat zum Prozess welcher diesen Aufruf getätigt hat und ist nicht aufzählbar.
Wenn diese Funktion erfolgreich ist, dann kann der Aufrufer der Funktion den Speicher (auf welchen mit $pData gezeigt wird) freigeben, da das System eine eigene Kopie des Speichers hat.
Um Schriftarten zu entfernen welche installiert wurden, sollte man _WinAPI_RemoveFontMemResourceEx() verwenden.
Jedoch lädt das System alle Schriftarten aus, wenn der Prozess beendet wurde.
_WinAPI_RemoveFontMemResourceEx
Suche nach AddFontMemResourceEx in der MSDN Bibliothek.
#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'
; Load Resources.dll to memory
Local $hInstance = _WinAPI_LoadLibraryEx(@ScriptDir & '\Extras\Resources.dll', $LOAD_LIBRARY_AS_DATAFILE)
If Not $hInstance Then
MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Error', @ScriptDir & '\Extras\Resources.dll not found.')
Exit
EndIf
; Load JPEG resource from Resources.dll library
Local $hResource = _WinAPI_FindResource($hInstance, 'JPEG', 1)
Local $iSize = _WinAPI_SizeOfResource($hInstance, $hResource)
Local $hData = _WinAPI_LoadResource($hInstance, $hResource)
Local $pData = _WinAPI_LockResource($hData)
; Save resource to .jpg file
Local $hFile = FileOpen($sJpg, 2 + 16)
Local $tData = DllStructCreate('byte[' & $iSize & ']', $pData)
FileWrite($hFile, DllStructGetData($tData, 1))
FileClose($hFile)
; Load FONT resource from Resources.dll library
$hResource = _WinAPI_FindResource($hInstance, $RT_FONT, 'TECHNOVIA_CAPS')
$iSize = _WinAPI_SizeOfResource($hInstance, $hResource)
$hData = _WinAPI_LoadResource($hInstance, $hResource)
$pData = _WinAPI_LockResource($hData)
; Add font from a memory to the system
Local $hFont = _WinAPI_AddFontMemResourceEx($pData, $iSize)
; Load SOUND resource from Resources.dll library
$hResource = _WinAPI_FindResource($hInstance, 'SOUND', 1)
$iSize = _WinAPI_SizeOfResource($hInstance, $hResource)
$hData = _WinAPI_LoadResource($hInstance, $hResource)
$pData = _WinAPI_LockResource($hData)
; Copy WAV to memory for use later
Local $hWave = _MemGlobalAlloc($iSize, $GMEM_MOVEABLE)
Local $pWave = _MemGlobalLock($hWave)
_MemMoveMemory($pData, $pWave, $iSize)
; _MemGlobalUnlock($hWave)
; Load STRING resource from Resources.dll library
Local $sText = _WinAPI_LoadString($hInstance, 1)
; Unload Resources.dll from memory
_WinAPI_FreeLibrary($hInstance)
; Create 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)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idButton
_WinAPI_PlaySound($pWave, BitOR($SND_ASYNC, $SND_MEMORY, $SND_NOWAIT))
EndSwitch
WEnd
; Free resources
_WinAPI_RemoveFontMemResourceEx($hFont)
FileDelete($sJpg)