using System.Runtime.InteropServices; namespace CursorLang.Interop; /// /// Win32 API для определения раскладки активного окна. /// internal static class KeyboardLayoutNative { [DllImport("user32.dll")] internal static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] private static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr lpdwProcessId); [DllImport("user32.dll")] private static extern IntPtr GetKeyboardLayout(uint idThread); /// /// Идентификатор локали для окна. Раскладка в Windows привязана к потоку, /// поэтому так её видно у любого приложения, а не только у своего. /// internal static int GetLocaleIdOf(IntPtr hWnd) { uint threadId = GetWindowThreadProcessId(hWnd, IntPtr.Zero); return (int)GetKeyboardLayout(threadId).ToInt64() & 0xFFFF; } }