Found a function example by trancexx on how to calculate the high and low surrogate.
#include <GUIConstantsEx.au3>
Local $hGUI = GUICreate("Test", 200, 90)
Local $hLabel = GUICtrlCreateLabel("", 5, 5, 190, 130)
GUICtrlSetFont($hLabel, 48)
; https://www.gaijin.at/de/infos/unicode-zeichentabelle-piktogramme-3
GUICtrlSetData($hLabel, " " & _ChrW(0x1F50A) & " " & _ChrW(0x1F525))
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
Func _ChrW($iCodePoint) ; By trancexx
; https://www.autoitscript.com/forum/topic/149307-another-unicode-question/?do=findComment&comment=1064547
If $iCodePoint <= 0xFFFF Then Return ChrW($iCodePoint)
If $iCodePoint > 0x10FFFF Then Return SetError(1, 0, "")
Local $tOut = DllStructCreate("word[2]")
Local $high_surrogate = BitShift($iCodePoint, 10) + 0xD7C0
Local $low_surrogate = BitAND($iCodePoint, 0x3FF) + 0xDC00
ConsoleWrite("CodePoint = " & @tab& @tab & Hex($iCodePoint,4) & @crlf)
ConsoleWrite("High Surrogate = " & @tab & Hex($high_surrogate, 4) & @CRLF)
ConsoleWrite("Low Surrogate = " & @tab & Hex($low_surrogate, 4) & @CRLF)
ConsoleWrite(@CRLF)
DllStructSetData($tOut, 1, $high_surrogate, 1)
DllStructSetData($tOut, 1, $low_surrogate, 2)
Return BinaryToString(DllStructGetData(DllStructCreate("byte[4]", DllStructGetPtr($tOut)), 1), 2)
EndFunc ;==>_ChrW