public Boolean GetKeyboardLayouts(UInt16 langid, out NativeApi.TF_INPUTPROCESSORPROFILE[] keyboardLayouts)
        {
            keyboardLayouts = null;

            if (!this.IsCreated())
            {
                return(false);
            }

            var result = this.InputProcessorProfileMgrInterface.EnumProfiles(langid, out var enumerator);

            if (!this.CheckResult(result, "ITfInputProcessorProfileMgr.EnumProfiles"))
            {
                return(false);
            }

            result = enumerator.Reset();
            if (!this.CheckResult(result, "IEnumTfInputProcessorProfiles.Reset"))
            {
                return(false);
            }

            var profiles = new NativeApi.TF_INPUTPROCESSORPROFILE[32];

            result = enumerator.Next((UInt32)profiles.Length, profiles, out var profilesRead);
            if (!this.CheckResult(result, "IEnumTfInputProcessorProfiles.Next"))
            {
                return(false);
            }

            var keyboardLayoutsCount = 0;

            for (var i = 0; i < profilesRead; i++)
            {
                if (NativeApi.TF_PROFILETYPE_KEYBOARDLAYOUT == (profiles[i].dwProfileType & NativeApi.TF_PROFILETYPE_KEYBOARDLAYOUT))
                {
                    keyboardLayoutsCount++;
                }
            }

            keyboardLayouts = new NativeApi.TF_INPUTPROCESSORPROFILE[keyboardLayoutsCount];

            var keyboardLayoutsIndex = 0;

            for (var i = 0; i < profilesRead; i++)
            {
                if (NativeApi.TF_PROFILETYPE_KEYBOARDLAYOUT == (profiles[i].dwProfileType & NativeApi.TF_PROFILETYPE_KEYBOARDLAYOUT))
                {
                    keyboardLayouts[keyboardLayoutsIndex] = profiles[i];
                    keyboardLayoutsIndex++;
                }
            }

            return(true);
        }
        public Boolean GetActivateKeyboardLayout(out NativeApi.TF_INPUTPROCESSORPROFILE keyboardLayout)
        {
            keyboardLayout = new NativeApi.TF_INPUTPROCESSORPROFILE();

            if (!this.IsCreated())
            {
                return(false);
            }

            var result = this.InputProcessorProfileMgrInterface.GetActiveProfile(NativeApi.GUID_TFCAT_TIP_KEYBOARD, out keyboardLayout);

            return(this.CheckResult(result, "ITfInputProcessorProfileMgr.GetActivateProfile"));
        }