1 | #include <WinAPI.au3> |
---|
2 | |
---|
3 | ;Global Const $__WINAPCONSTANT_FORMAT_MESSAGE_FROM_SYSTEM = 0x1000 |
---|
4 | Global Const $__WINAPCONSTANT_FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x100 |
---|
5 | |
---|
6 | Func _WinAPI_GetLastErrorMessageW() |
---|
7 | Local Const $iFlags = BitOR($__WINAPCONSTANT_FORMAT_MESSAGE_ALLOCATE_BUFFER, $__WINAPCONSTANT_FORMAT_MESSAGE_FROM_SYSTEM) |
---|
8 | Local $tBufferPtr = DllStructCreate("ptr") |
---|
9 | |
---|
10 | Local $aResult = DllCall("Kernel32.dll", "int", "FormatMessageW", _ |
---|
11 | "dword", $iFlags, "ptr", 0, "dword", _WinAPI_GetLastError(), "dword", 0, _ |
---|
12 | "ptr", DllStructGetPtr($tBufferPtr), "dword", 0, "ptr", 0) |
---|
13 | If @error Then Return SetError(@error, 0, "") |
---|
14 | |
---|
15 | Local $charCount = $aResult[0], $Text = "" |
---|
16 | Local $tBuffer, $pBuffer = DllStructGetData($tBufferPtr, 1) |
---|
17 | If $pBuffer Then |
---|
18 | If $charCount > 0 Then |
---|
19 | $tBuffer = DllStructCreate("wchar[" & ($charCount+1) & "]", $pBuffer) |
---|
20 | $Text = DllStructGetData($tBuffer, 1) |
---|
21 | EndIf |
---|
22 | _WinAPI_LocalFree($pBuffer) |
---|
23 | EndIf |
---|
24 | |
---|
25 | Return $Text |
---|
26 | EndFunc |
---|