[Решено] Раскладка клавиатуры кодом.

Автор bsi, 23 января 2017, 13:12

0 Пользователи и 1 гость просматривают эту тему.

bsi

В Excel переключение раскладки клавиатуры делаем следующим кодом:
Private Declare Function ActivateKeyboardLayout _
                         Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Const kb_lay_ru As Long = 68748313, kb_lay_en As Long = 67699721

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Select Case Target.Column    ' в зависимости от номера столбца активной ячеки
       Case 1 To 3, 6    
           ВключитьРусскуюРаскладку
       Case 4, 5:    
           ВключитьАнглийскуюРаскладку
       Case Else:    ' ничего не делаем (оставляем текущую раскладку)
   End Select
End Sub

Sub ВключитьРусскуюРаскладку()
   ' Переключить на русский язык
   x = ActivateKeyboardLayout&(kb_lay_ru, 0)
End Sub

Sub ВключитьАнглийскуюРаскладку()
   ' Переключить на английский язык
   x = ActivateKeyboardLayout&(kb_lay_en, 0)
End Sub

Помогите это же сделать в LibreOfiice.
Во вложении файл Excel.

economist

#1
Если не получится - попробуйте программу PuntoSwitcher https://yandex.ru/soft/punto/:
1) Бесплатная для любых применений
2) Работает во всех приложениях
3) Предоставляет глобальную Автозамену типа ирф -> "Именем Российской Федерации"
4) Сама перключает язык ввода в зависимости от вводимого текста

Предвосхищая возможные вопли недовольных данной программой, замечу что её неправильная конвертация лечится:
а) нажатием клавиши Pause/Break
б) правильным, без опечаток, набором текста  
в) созданием "Правила"-исключения
г) внесением всей "основной" программы в список исключений (полезно, например, для ПО Клиент-банк)
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

mikekaganski

Private Declare Function ActivateKeyboardLayout _
                          Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Const kb_lay_ru As Long = 68748313, kb_lay_en As Long = 67699721

Sub ActivateRussianLayout()
    ' Переключить на русский язык
    x = ActivateKeyboardLayout&(kb_lay_ru, 0)
End Sub

Sub ActivateEnglishLayout()
    ' Переключить на английский язык
    x = ActivateKeyboardLayout&(kb_lay_en, 0)
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Target.CellAddress.Column    ' в зависимости от номера столбца активной ячеки
        Case 1 To 3, 6   
            ActivateRussianLayout
        Case 4, 5:   
            ActivateEnglishLayout
        Case Else:    ' ничего не делаем (оставляем текущую раскладку)
    End Select
End Sub


1. Не поддерживаются локализованные имена.
2. Target.CellAddress.Column
С уважением,
Михаил Каганский

rami

Цитата: mikekaganski от 23 января 2017, 11:521. Не поддерживаются локализованные имена.
Кажется, можно включить поддержку, в крайнем случае переписать на латиницу.
Цитата: mikekaganski от 23 января 2017, 11:522. Target.CellAddress.Column
Тоже не проблема.

А вот отсутствие библиотеки Lib "user32" существенно.

mikekaganski

:) Извините за не слишком внятный пост.

В предыдущем посте я отправил исправленный код, работающий в LO под Windows, с комментариями о том, что конкретно было изменено.

Это не будет работать под другими операционными системами (в первоначальном вопросе не стояла задача кросс-платформенного решения).
С уважением,
Михаил Каганский

bsi

На этом форуме https://forum.openoffice.org/en/forum/viewtopic.php?f=45&t=87448&p=410183#p410183 нашел ответ для LO.
Private Declare Function ActivateKeyboardLayout Lib _
"user32.dll" (ByVal myLanguage As Long, Flag As Boolean) As Long

Sub ActiveAmericanKeyboard()
Call ActivateKeyboardLayout(&H0409, 0)
End Sub
Sub ActiveRusKeyboard()
Call ActivateKeyboardLayout(&H0419, 0)
End Sub

Может кому и пригодится. :beer: