Add GetThreadPreferredUILanguages
Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
parent
7637d86c7d
commit
c1bd614597
@ -2476,6 +2476,36 @@ static DWORD SetEntriesInAclW(_In_ ULONG cCountOfExplicitEntries, _In_reads_opt_
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
///
|
||||
/// Retrieves the thread preferred UI languages for the current thread.
|
||||
///
|
||||
/// \sa [GetThreadPreferredUILanguages function](https://learn.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getthreadpreferreduilanguages)
|
||||
///
|
||||
template<class _Traits, class _Ax>
|
||||
_Success_(return != 0) BOOL GetThreadPreferredUILanguages(_In_ DWORD dwFlags, _Out_ PULONG pulNumLanguages, _Out_ std::basic_string<wchar_t, _Traits, _Ax> &sValue)
|
||||
{
|
||||
wchar_t szStackBuffer[WINSTD_STACK_BUFFER_BYTES/sizeof(wchar_t)];
|
||||
ULONG ulSize = _countof(szStackBuffer);
|
||||
|
||||
// Try with stack buffer first.
|
||||
if (GetThreadPreferredUILanguages(dwFlags, pulNumLanguages, szStackBuffer, &ulSize)) {
|
||||
// Copy from stack.
|
||||
sValue.assign(szStackBuffer, ulSize - 1);
|
||||
return TRUE;
|
||||
} else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
|
||||
// Query required size.
|
||||
ulSize = 0;
|
||||
GetThreadPreferredUILanguages(dwFlags, pulNumLanguages, NULL, &ulSize);
|
||||
// Allocate on heap and retry.
|
||||
std::unique_ptr<WCHAR[]> szBuffer(new WCHAR[ulSize]);
|
||||
if (GetThreadPreferredUILanguages(dwFlags, pulNumLanguages, szBuffer.get(), &ulSize)) {
|
||||
sValue.assign(szBuffer.get(), ulSize - 1);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#pragma warning(pop)
|
||||
|
||||
/// @}
|
||||
|
Loading…
x
Reference in New Issue
Block a user