;~ #RequireAdmin
#include <Array.au3>
#include <WinAPISys.au3>
Global $Flag, $Lang, $sText, $aData = _WinAPI_GetKeyboardLayoutList()
_ArrayDisplay($aData, 'Список включенных в ОС языков ввода.')
If IsArray($aData) Then
For $i = 1 To $aData[0] ; Ищем нужный код "0x040C040C". По результатам отображается соответствующее окно.
$Lang = BitAND($aData[$i], 0xFFFF)
Switch $Lang
Case 2060, 3084, 4108, 5132, 6156, 1036
If Not StringInStr($aData[$i], '0x040C', 2) Then
$sText = 'У Вас включена НЕправильная Французская раскладка!' & @CRLF & @CRLF & 'Хотите включить Правильную?'
$Flag = 68
Else
$sText = 'У Вас включена Правильная Французская раскладка!'
$Flag = 64
ExitLoop
EndIf
Case Else
$sText = 'У Вас не включен Французский!' & @CRLF & @CRLF & 'Хотите включить Его?'
$Flag = 20
EndSwitch
Next
EndIf
Switch MsgBox($Flag, '', $sText)
Case 6 ; Да
_WinAPI_LoadKeyboardLayout(0x040C, BitOR($KLF_ACTIVATE, $KLF_REPLACELANG, $KLF_SETFORPROCESS))
If _WinAPI_SetKeyboardLayout(WinGetHandle(AutoItWinGetTitle()), 0x040C, $INPUTLANGCHANGE_SYSCHARSET) Then MsgBox(64, '', 'Успех!')
#cs================= Это дополнение на случай если после выхода из ОС или перезагрузки все вернулось в первоначальное состояние. ====================
Local $sPath = StringRegExpReplace(RegRead('HKCU\Software\Microsoft\Windows Search\ProcessedSearchRoots\0000', ''), '.+?\{(.+)\}\/?', '\1')
If $sPath Then
Local $KeyNs[1]
$SectName2 = 'HKU\' & $sPath & '\Software\Microsoft\CTF\SortOrder\AssemblyItem\0x0000040c\{34745C63-B2F0-4784-8B67-5E12C8701A31}\00000000'
RegWrite($SectName2, 'CLSID', 'REG_SZ', '{00000000-0000-0000-0000-000000000000}')
RegWrite($SectName2, 'KeyboardLayout', 'REG_DWORD', '67896332')
RegWrite($SectName2, 'Profile', 'REG_SZ', '{00000000-0000-0000-0000-000000000000}')
$SectName1 = 'HKU\' & $sPath & '\Software\Microsoft\CTF\SortOrder\Language'
$SectName2 = 'HKU\' & $sPath & '\Keyboard Layout\Preload'
$i = 2
While 1
$Var = RegRead($SectName2, $i)
If $Var Then
ReDim $KeyNs[UBound($KeyNs) + 1]
$KeyNs[$i - 2] = $Var
Else
$KeyNs[$i - 2] = '0000040c'
ExitLoop
EndIf
$i += 1
WEnd
_ArraySort($KeyNs)
RegWrite($SectName1, StringFormat('%08s', UBound($KeyNs)), 'REG_SZ', '0000040c')
For $i = 0 To UBound($KeyNs) - 1
RegWrite($SectName2, $i + 2, 'REG_SZ', $KeyNs[$i])
Next
EndIf
#ce==================================================================================================================================================
EndSwitch