日期:2014-05-17 浏览次数:21099 次
    [DllImport("user32.dll")] public static extern int GetKeyboardLayoutList(int size, [Out, MarshalAs(UnmanagedType.LPArray)] IntPtr[] hkls);
    [DllImport("imm32")] public static extern uint ImmGetDescription(IntPtr hKL, StringBuilder lszDescription, uint uBufLen);
    [DllImport("imm32")] public static extern uint ImmGetIMEFileName(IntPtr hKL, StringBuilder lpszFileName, uint uBufLen);
    static void Main(string[] args)
    {
        IntPtr[] hkls = new IntPtr[20];
        int n = GetKeyboardLayoutList(20, hkls);
        Console.WriteLine("{0} layouts:", n);
        for (int i = 0; i < n; i++)
        {
            IntPtr hkl = hkls[i];
            var desc = new StringBuilder(500);
            ImmGetDescription(hkl, desc, 500);
            var fname = new StringBuilder(500);
            ImmGetIMEFileName(hkl, fname, 500);
            Console.WriteLine("{0}({1}) '{2}' ({3})", hkl.ToString("x"), (int)hkl & 0x00ffff, desc, fname);
        }
    }