GetUserPreferredUILanguages (kernel32)
Last changed: -124.157.79.144

.
Summary
Retrieves information about the user preferred UI languages.

C# Signature:

[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool GetUserPreferredUILanguages(
   uint dwFlags,
   out uint pulNumLanguages,
   char[] pwszLanguagesBuffer,
   ref uint pcchLanguagesBuffer);

VB Signature:

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

The char[] is used because StringBuilder would otherwise stop at the first \0 character, resulting in only one language ever being reported.

Sample Code:

static void DisplayUserPref()
{
    uint languagesCount, languagesBufferSize = 0;

    if (GetUserPreferredUILanguages(
        MUI_LANGUAGE_NAME,
        out languagesCount,
        null,
        ref languagesBufferSize))
    {
        char[] languagesBuffer = new char[languagesBufferSize];
        if (GetUserPreferredUILanguages(
            MUI_LANGUAGE_NAME,
            out languagesCount,
            languagesBuffer,
            ref languagesBufferSize))
        {
            string[] languages = new string(languagesBuffer, 0, (int) languagesBufferSize - 2).Split('\0');
            Console.WriteLine("GetUserPreferredUILanguages returns " + languages.Length + " languages:");
            foreach (string language in languages)
                Console.WriteLine("   " + language);
        }
        else
            Console.WriteLine("GetUserPreferredUILanguages(2) returns #" + Marshal.GetLastWin32Error());
    }
    else
        Console.WriteLine("GetUserPreferredUILanguages(1) returns #" + Marshal.GetLastWin32Error());
}

const uint MUI_LANGUAGE_ID = 0x4;    // Use traditional language ID convention
const uint MUI_LANGUAGE_NAME = 0x8;    // Use ISO language (culture) name convention

Documentation