программное изменение языка ввода

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Nazar
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 03.05.2004 (Пн) 21:07

программное изменение языка ввода

Сообщение Nazar » 02.11.2004 (Вт) 13:05

Можно ли как нибудь программно изменять язык ввода с русского на английский и наоборот?

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 02.11.2004 (Вт) 13:55

LoadKeyboardLayout API:
Код: Выделить всё
'Пример из API-Guide (модифицированный)

Const KL_NAMELENGTH As Long = 9
Const KLF_ACTIVATE  As Long = &H1

Const LANG_RU_STD = "00000419"
Const LANG_NL_STD As String = "00000413"
Const LANG_EN_US As String = "00000409"
Const LANG_DU_STD As String = "00000407"
Const LANG_FR_STD As String = "0000040C"

Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Public Function SetKbLayout(strLocaleId As String) As Boolean
On Error Resume Next
  Dim strLocId As String
  Dim strMsg As String
  Dim lngErrNr As Long

  strLocId = String(KL_NAMELENGTH, 0)
  GetKeyboardLayoutName strLocId
  If strLocId = (strLocaleId & Chr(0)) Then
    SetKbLayout = True
  Else
    strLocId = String(KL_NAMELENGTH, 0)
    strLocId = LoadKeyboardLayout((strLocaleId & Chr(0)), KLF_ACTIVATE)
    If IsNull(strLocId) Then
      SetKbLayout = False
    Else
      strLocId = String(KL_NAMELENGTH, 0)
      GetKeyboardLayoutName strLocId
      If strLocId = (strLocaleId & Chr(0)) Then
        SetKbLayout = True
      Else
        SetKbLayout = False
      End If
    End If
  End If
End Function
Private Sub Form_Load()
    SetKbLayout LANG_RU_STD
    MsgBox "Russian - RU!"
    'Английский
    SetKbLayout LANG_EN_US
    MsgBox "English - US!"
End Sub
Последний раз редактировалось hCORe 02.11.2004 (Вт) 14:00, всего редактировалось 1 раз.
Моду создают модоки, а распространяют модозвоны.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.11.2004 (Вт) 13:56

Держи курс на ActivateKeyboardLayout.
Lasciate ogni speranza, voi ch'entrate.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 02.11.2004 (Вт) 14:04

Более короткий пример, когда не надо ставить новой раскладки в систему (она уже есть). Используется ActivateKeyboardLayout API:
Код: Выделить всё
Private Declare Function ActivateKeyboardLayout Lib "user32.dll" (ByVal HKL As Long, ByVal Flags As Long) As Long
Private Sub Form_Load()
    'русский (Россия)
    ActivateKeyboardLayout &H419, 0
    MsgBox "Russian - Russia!"
    'английский (США)
    ActivateKeyboardLayout &H409, 0
    MsgBox "English - USA!"
End Sub
Последний раз редактировалось hCORe 03.11.2004 (Ср) 16:35, всего редактировалось 1 раз.
Моду создают модоки, а распространяют модозвоны.

Nazar
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 03.05.2004 (Пн) 21:07

Спасибо

Сообщение Nazar » 03.11.2004 (Ср) 13:49

Спасибо всем кто ответил, все сделал, все работает.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList  
cron