Имитация разноязычного ввода на Api

nvyush

Lotus team
22.04.2009
2 317
0
#1
Есть необходимость написать код, который бы имитировал ввод с клавиатуры символов в разных раскладках, например "написано на VB" с использованием API. Попробовал так:
Код:
Const KEYBD_LAYOUT_EN = &H4090409
Const KEYBD_LAYOUT_RU = &H4190419
Const KEYEVENTF_KEYDOWN = &H0
Const KEYEVENTF_KEYUP = &H2
Const VK_I = &H49
Const VK_Z = &H5A
Const VK_OEM_MINUS = &HBD
Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Sub Q()
Call ActivateKeyboardLayout(KEYBD_LAYOUT_EN, 0)
Call keybd_event(VK_I, 0, KEYEVENTF_KEYDOWN, 0)
Call keybd_event(VK_I, 0, KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_OEM_MINUS, 0, KEYEVENTF_KEYDOWN, 0)
Call keybd_event(VK_OEM_MINUS, 0, KEYEVENTF_KEYUP, 0)
Call ActivateKeyboardLayout(KEYBD_LAYOUT_RU, 0)
Call keybd_event(VK_Z, 0, KEYEVENTF_KEYDOWN, 0)
Call keybd_event(VK_Z, 0, KEYEVENTF_KEYUP, 0)
End Sub
Раскладка переключается только после завершения выполнения кода и вся строка выводится в последней раскладке. Как победить, кто знает?