Last active
July 3, 2023 18:09
-
-
Save DJm00n/1376cf84bb4c4ef73f2a55e1b9343247 to your computer and use it in GitHub Desktop.
Bcp48Langs PInvoke
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[DllImport("winlangdb.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int GetLanguageNames(string Language, StringBuilder Autonym, StringBuilder EnglishName, StringBuilder LocalName, StringBuilder ScriptName); | |
[DllImport("winlangdb.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int LanguagesDatabaseGetChildLanguages( | |
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string language, | |
int sortOrder /*2 or 4*/, | |
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string customLanguage, | |
char delimeter, | |
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string childLanguages); | |
[DllImport("winlangdb.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int LanguagesDatabaseHasChildren( | |
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string language, | |
out uint result); | |
[DllImport("winlangdb.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int LanguagesDatabaseGetLeafLanguages( | |
IntPtr unk, | |
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string language, | |
char delimeter, | |
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string leafLanguages); | |
[DllImport("winlangdb.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int EnsureLanguageProfileExists(); | |
[DllImport("winlangdb.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int SetUserLanguages(char Delimiter, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string UserLanguages); | |
[DllImport("bcp47langs.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int GetUserLanguages(char Delimiter, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string UserLanguages); | |
[DllImport("bcp47langs.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int GetUserLanguageInputMethods(string Language, char Delimiter, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string InputMethods); | |
[DllImport("bcp47langs.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int IsTransientLcid(int @Lcid, out bool Result); | |
[DllImport("bcp47langs.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int Bcp47FromHkl(IntPtr Hkl, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string LanguageTag); | |
[DllImport("bcp47langs.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int Bcp47FromLcid(int @Lcid, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string LanguageTag); | |
[DllImport("bcp47langs.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int LcidFromBcp47([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string LanguageTag, out int Lcid); | |
[DllImport("bcp47langs.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int Bcp47GetIsoLanguageCode([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string languageTag, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string isoLanguageCode); | |
[DllImport("ext-ms-win-globalization-input-l1-1-2.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int WGIGetDefaultInputMethodForLanguage([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string Language, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string DefaultTipString); | |
[DllImport("ext-ms-win-globalization-input-l1-1-2.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int WGITransformInputMethodsForLanguage([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string TipString, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string Language, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string TransformedTipString); | |
[DllImport("ext-ms-win-globalization-input-l1-1-2.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int WGIGetInputMethodDescription([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string TipString, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string Description); | |
[DllImport("ext-ms-win-globalization-input-l1-1-2.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int WGIGetInputMethodTileName([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string TipString, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string TileName); | |
[DllImport("ext-ms-win-globalization-input-l1-1-2.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int WGIGetCompatibleInputMethodsForLanguage([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string Language, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] string unkLanguage, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(HStringMarshaler))] out string compatibleTipString); | |
[DllImport("input.dll", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern int InstallLayoutOrTip(string TipString, int Flags); | |
[DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true)] | |
internal static extern int ResolveLocaleName(string lpNameToResolve, StringBuilder lpLocaleName, int cchLocaleName); | |
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] | |
public static extern int GetLocaleInfoEx(string lpLocaleName, int LCType, StringBuilder lpLCData, int cchData); | |
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)] | |
internal static extern int SHLoadIndirectString(string input, StringBuilder output, uint outputCount, IntPtr reserved); | |
public sealed class HStringMarshaler : ICustomMarshaler | |
{ | |
public static readonly HStringMarshaler Instance = new HStringMarshaler(); | |
public static ICustomMarshaler GetInstance(string _) => Instance; | |
public void CleanUpManagedData(object managedObj) | |
{ | |
// nothing to do | |
} | |
public void CleanUpNativeData(IntPtr nativeData) | |
{ | |
if (nativeData != IntPtr.Zero) | |
{ | |
Marshal.ThrowExceptionForHR(WindowsDeleteString(nativeData)); | |
} | |
} | |
public int GetNativeDataSize() => -1; | |
public IntPtr MarshalManagedToNative(object managedObj) | |
{ | |
if (managedObj == null) | |
return IntPtr.Zero; | |
var str = (string)managedObj; | |
Marshal.ThrowExceptionForHR(WindowsCreateString(str, str.Length, out var ptr)); | |
return ptr; | |
} | |
public object MarshalNativeToManaged(IntPtr nativeData) | |
{ | |
if (nativeData == IntPtr.Zero) | |
return null; | |
var ptr = WindowsGetStringRawBuffer(nativeData, out var length); | |
if (ptr == IntPtr.Zero) | |
return null; | |
if (length == 0) | |
return string.Empty; | |
return Marshal.PtrToStringUni(ptr, length); | |
} | |
[DllImport("api-ms-win-core-winrt-string-l1-1-0.dll")] | |
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)] | |
private static extern int WindowsCreateString([MarshalAs(UnmanagedType.LPWStr)] string sourceString, int length, out IntPtr @string); | |
[DllImport("api-ms-win-core-winrt-string-l1-1-0.dll")] | |
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)] | |
private static extern int WindowsDeleteString(IntPtr @string); | |
[DllImport("api-ms-win-core-winrt-string-l1-1-0.dll")] | |
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)] | |
private static extern IntPtr WindowsGetStringRawBuffer(IntPtr @string, out int length); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
WinLangdb.dll usages: