Всем привет! Как переключать раскладку клавиатуры на уровне Windows? Например, чтобы это работало в Word' е и других текстовых редакторах. Код,приведённый ниже, и другие похожие дают локальное переключение на уровне VB программы, где этот код находится.
Option Explicit
Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Private Const KLF_ACTIVATE = 1
Public Sub SetLanguage(ByVal s As String)
Select Case UCase(Left(s, 1))
Case "R"
LoadKeyboardLayout "00000419", KLF_ACTIVATE
Case "E"
LoadKeyboardLayout "00000409", KLF_ACTIVATE
Case Else
End Select
End Sub
Private Sub Command1_Click()
'Вызывается соответственно с параметром "R", "U" или "E"
Вот в таком варианте у меня в Ворде всё работает. Кинул две кнопки и написал код в ThisDocument:
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long Private Const kb_lay_ru As Long = 68748313 Private Const kb_lay_en As Long = 67699721
Private Sub CommandButton1_Click() Dim x x = ActivateKeyboardLayout&kb_lay_ru, 0) End Sub
Private Sub CommandButton2_Click() Dim x x = ActivateKeyboardLayout&kb_lay_en, 0) End Sub
Padre, USA, привет! Теперь по поводу твоего кода, Padre. Я испытывал именно этот код. Печатаешь, например, в Worde в английской раскладке. Программой с этим кодом переключаешь раскладку на русскую, в трее появляется значок Ru. Переходишь к Word'у и значок в трее моментом меняется обратно к En. В итоге Word продолжает печатать латинскими буквами. То же самое происходит и в Блокноте, и в Bred2. Что я делаю неправильно?
USA, не мог бы ты немного поподробней, а то я начинающий программист. Пока.
При открытии документа ворд будет переключаться на русскую раскладку. Так же можно в других офисных прогах, меняй только первое слово на имя приложения.
Попробуй перед переключением раскладки активировать окно твоего редактора. Допустим, "отвлекаясь" от Ворда и запуская свой переключатель раскладок, ты делаешь окно Ворда неактивным. Скорее всего, так. Из-за этого у тебя раскладка и не "привязывается" к Ворду. Но если прога сначала найдёт окошко Ворда и сделает его активным, а уже потом сменит раскладку, то по идее, должно всё получиться...
Примеры по работе с "чужими" окнами есть на VBNET в избытке.
Для тех, кто устал постоянно перепечатывать текст, набранный по ошибке на английском. Программа PuntoSwitcher (Пунто свитчер) идеальный выход из сложившейся ситуации. Сэкономит кучу времени. Можно скачать бесплатно по этой ссылке http://depositfiles.com/files/exat08nbo