Виталий1971 » 10.06.2004 (Чт) 19:55
Пример1
'Код модуля
Declare Function ActivateKeyboardLayout Lib "user32" _
(ByVal HKL As Long, ByVal flags As Long) As Long
Public Const kb_lay_ru As Long = 68748313
Public Const kb_lay_en As Long = 67699721
' Код формы
Private Sub Command1_Click()
'Создаем документ Word и сохраняем как "1" (к примеру)
AppActivate "1" 'При запуске окно Word становиться активным
'Пробуем переключать раскладку
' Переключить на русский язык
For i = 1 To 10
Da
x = ActivateKeyboardLayout&(kb_lay_ru, 0)
' Переключить на английский язык
Da
x = ActivateKeyboardLayout&(kb_lay_en, 0)
Next i
End Sub
Private Sub Da() ' Прога задержки по времени
PauseTime = 4 ' Задает длительность.
Start = Timer ' Задает начало паузы.
Do While Timer < Start + PauseTime
DoEvents ' Передает управление другим процессам.
Loop
Finish = Timer ' Задает конец паузы.
TotalTime = Finish - Start ' Вычисляет длительность паузы.
End Sub
Пример2 пробовал с циклом аналогично Примеру1
Public Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Public Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Public Const HKL_NEXT = 1
Public Const HKL_PREV = 0
Public Const KLF_REORDER = &H8
Public Sub МоеИмяПроцедуры()
Dim lCodeKeybord As Long, CodeKeybord As Long
lCodeKeybord = GetKeyboardLayout(CodeKeybord)
Appactivate "1" ' Активно окно Word
If lCodeKeybord = 67699721 Then 'если английский, то все нормально
'Выполняем необходимые действия
Else 'если нет, то переключаем на английский
'в моем случае и выполняем необходимые действия
Call ActivateKeyboardLayout(HKL_NEXT, KLF_REORDER)
'Выполняем необходимые действия
'Переключаем на предыдущую раскладку, в моем случае русская
Call ActivateKeyboardLayout(HKL_PREV, KLF_REORDER)
End If