Copie une chaîne donnée dans le bloc de mémoire nouvellement allouée et retourne son pointeur
#include <WinAPIMem.au3>
_WinAPI_CreateString ( $sString [, $pString = 0 [, $iLength = -1 [, $bUnicode = True [, $bAbort = True]]]] )
$sString | La chaîne source à copier. |
$pString | [optionnel] Un pointeur sur la chaîne existante qui doit être remplacée par une nouvelle chaîne. Si ce paramètre est un pointeur de chaîne valide, la mémoire sera réallouée à une nouvelle chaîne. Cependant, la nouvelle mémoire est allouée à un endroit différent. Par conséquent, vous devriez toujours utiliser le pointeur que cette fonction retourne. Si ce paramètre est 0 (par défaut) ou si le pointeur sur la chaîne est invalide, la fonction alloue simplement une nouvelle mémoire. |
$iLength | [optionnel] La longueur de tampon nécessaire, dans TCHARs, sans le caractère nul de terminaison. Si ce paramètre est (-1), la longueur de la mémoire tampon sera égale à la longueur de la chaîne source. Si $iLength est inférieure à la chaîne source, la chaîne sera tronquée à la longueur spécifiée. Par défaut c'est 1. |
$bUnicode | [optionnel] Indique si une chaîne est codée Unicode ou ASCII, les valeurs valides sont: True - Unicode (par défaut). False - ASCII. |
$bAbort | [optionnel] Spécifie s'il faut quitter le script s'il n'y a pas assez de mémoire, les valeurs valides sont: True - Affiche un message d'erreur et termine le script avec le code d'erreur 1 (par défaut). False - Continue le script et retourne une erreur. |
Succès: | Retourne le pointeur sur la nouvelle chaîne terminée par nul, @extended retourne la longueur de la mémoire tampon de chaîne, dans TCHARs (non compris le caractère nul de terminaison). |
Échec: | Retourne 0. |
Quand le tampon n'est plus nécessaire, vous devez le détruire en appelant la fonction _WinAPI_FreeMemory().
#include <GUIConstantsEx.au3> #include <SendMessage.au3> #include <WinAPIMem.au3> #include <WinAPIMisc.au3> #include <WinAPISysWin.au3> Global Const $WM_MYMESSAGE = _WinAPI_RegisterWindowMessage('MyMessage') Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), 400, 93) Local $idInput = GUICtrlCreateInput('', 20, 20, 360, 20) Local $idButton = GUICtrlCreateButton('Send', 165, 59, 70, 23) GUIRegisterMsg($WM_MYMESSAGE, 'WM_MYMESSAGE') GUISetState(@SW_SHOW) Local $pString, $iMsg = GUIGetMsg() While $iMsg <> $GUI_EVENT_CLOSE If $iMsg = $idButton Then $pString = _WinAPI_CreateString(GUICtrlRead($idInput)) _WinAPI_SetMessageExtraInfo($pString) _SendMessage($hForm, $WM_MYMESSAGE, 1, 255) _WinAPI_FreeMemory($pString) EndIf $iMsg = GUIGetMsg() WEnd Func WM_MYMESSAGE($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg Local $pString = _WinAPI_GetMessageExtraInfo() If _WinAPI_IsMemory($pString) Then ConsoleWrite('WM_MYMESSAGE | WP = ' & Number($wParam) & ' | LP = ' & Number($lParam) & ' | EXTRA = "' & _WinAPI_GetString($pString) & '"' & @CRLF) EndIf EndFunc ;==>WM_MYMESSAGE