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

Тема в разделе "Visual Basic", создана пользователем nvyush, 10 фев 2010.

  1. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Есть необходимость написать код, который бы имитировал ввод с клавиатуры символов в разных раскладках, например "написано на VB" с использованием API. Попробовал так:
    Код (Text):
    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
    Раскладка переключается только после завершения выполнения кода и вся строка выводится в последней раскладке. Как победить, кто знает?
     

Поделиться этой страницей