Изменение раскладки

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

Изменение раскладки

Сообщение Etc » 10.12.2004 (Пт) 18:28

Если я посылаю сендкейсы на английском, то отображаются символы в русской раскладке. Как сменить раскладку на английскую
Ну не знаю я чего в подписи написать... :-)

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 10.12.2004 (Пт) 18:30

Поиск по форуму по слову ActivateKeyboardLayout ...

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 10.12.2004 (Пт) 20:08

Ну и от себя замечу, что ActivateKeyboardLayout изменит раскладку только для вызывающего треда текущего процесса, а чтобы сменить раскладку для всей системы, следует заюзать LoadKeyboardLayout

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.12.2004 (Сб) 0:18

xolod, путаешь - LoadKeyboardLayout делает раскладку доступной для активации, но не активирует. Сменить раскладку для всей системы сразу - невозможно.
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.12.2004 (Сб) 4:25

Придётся юзать SendInput. Там есть флаг посылания в юникоде...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 11.12.2004 (Сб) 14:05

to tyomitch
Если я пошлю вторым параметром LoadKeyboardLayout константу KLF_ACTIVATE, то она еще и активируется. Причем для все системы :wink:
Так что не путаю :arrow:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.12.2004 (Сб) 14:41

Да что ты говоришь?
KLF_ACTIVATE If the specified input locale identifier is not already loaded, the function loads and activates the input locale identifier for the current thread.

:-P
Изображение

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 11.12.2004 (Сб) 16:26

Ну тогда ведь можно послать KLF_SETFORPROCESS вместе с KLF_ACTIVATE, а потом пробежаться по всем окнам в системе и послать каждому сообщение WM_INPUTLANGCHANGE.. Тогда точно смениться для всей системы :lol:
И тебе :P

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.12.2004 (Сб) 19:43

Ну тогда можно вообще забить на LoadKeyboardLayout и просто разослать всем окнам WM_INPUTLANGCHANGE. Так что ты всё равно не в теме ;-)
Изображение

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 11.12.2004 (Сб) 20:23

Да ну тебя :P! Лучше в топике "Господа... " помоги мне с портированием программы с Дельфи на ВБ :roll:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.12.2004 (Сб) 20:40

Согласен, ну меня :-D
А с портированием не помогу, ибо с директиксом никогда не работал. Только дельфийский синтаксис могу объяснить, но вряд ли это сколько-нибудь поможет там.
Изображение

Etc
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 18.11.2004 (Чт) 19:07
Откуда: Челябинск

Вопрос

Сообщение Etc » 13.12.2004 (Пн) 18:29

Ok насчет мзменения раскладки понятно, а как определить тип раскладки в другой программе :?:
Ну не знаю я чего в подписи написать... :-)

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Re: Вопрос

Сообщение Ennor » 13.12.2004 (Пн) 19:49

Etc писал(а):Ok насчет мзменения раскладки понятно, а как определить тип раскладки в другой программе :?:

А зачем, пардон, это может понадобиться? Клавиатурного шпиона пишешь? :evil:

DragonTriste
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 15.08.2004 (Вс) 10:46

Сообщение DragonTriste » 14.12.2004 (Вт) 2:56

пардон, это может это уже параноя :?: :)
dragons on line...

Андрей Васюта
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 91
Зарегистрирован: 20.07.2004 (Вт) 19:40

Сообщение Андрей Васюта » 14.12.2004 (Вт) 12:32

Взято из журнала VB - Forever! выпуск №1

' Функция для переключения раскладок клавиатуры
Private Declare Function ActivateKeyboardLayout Lib "user32" _
(ByVal HKL As Long, ByVal flags As Long) As Long
'Константы
Const kb_lay_ru As Long = 68748313 ' русский
Const kb_lay_en As Long = 67699721 ' английский

' Переключить на русский язык
ActivateKeyboardLayout kb_lay_ru, 0

' Переключить на английский язык
ActivateKeyboardLayout kb_lay_en, 0
Большой программе - большие глюки.

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 14.12.2004 (Вт) 13:08

to Андрей Васюта
Ты не в кассу отписался :lol:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Etc
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 18.11.2004 (Чт) 19:07
Откуда: Челябинск

Сообщение Etc » 14.12.2004 (Вт) 13:14

DragonTriste писал(а):пардон, это может это уже параноя :?: :)

Не просто нужна прога которая автоматически вводит код(на англ. яз.) при входе. А если шлю сендкейсы то они отображаются в русской раскладке. Может посоветуте как проще это сделать :lol:
Ну не знаю я чего в подписи написать... :-)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.12.2004 (Вт) 14:18

Я ж говорю, SendInput...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Etc
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 18.11.2004 (Чт) 19:07
Откуда: Челябинск

Сообщение Etc » 14.12.2004 (Вт) 18:57

GSerg писал(а):Я ж говорю, SendInput...

А можно поподробнее :shock:
Ну не знаю я чего в подписи написать... :-)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 14.12.2004 (Вт) 19:23

Код: Выделить всё
Const VK_H = 72
Const VK_E = 69
Const VK_L = 76
Const VK_O = 79
Const KEYEVENTF_KEYUP = &H2
Const INPUT_MOUSE = 0
Const INPUT_KEYBOARD = 1
Const INPUT_HARDWARE = 2
Private Type MOUSEINPUT
  dx As Long
  dy As Long
  mouseData As Long
  dwFlags As Long
  time As Long
  dwExtraInfo As Long
End Type
Private Type KEYBDINPUT
  wVk As Integer
  wScan As Integer
  dwFlags As Long
  time As Long
  dwExtraInfo As Long
End Type
Private Type HARDWAREINPUT
  uMsg As Long
  wParamL As Integer
  wParamH As Integer
End Type
Private Type GENERALINPUT
  dwType As Long
  xi(0 To 23) As Byte
End Type
Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Sub Form_KeyPress(KeyAscii As Integer)
    'Print the key on the form
    Me.Print Chr$(KeyAscii);
End Sub
Private Sub Form_Paint()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    'Clear the form
    Me.Cls
    'call the SendKey-function
    SendKey VK_H
    SendKey VK_E
    SendKey VK_L
    SendKey VK_L
    SendKey VK_O
End Sub
Private Sub SendKey(bKey As Byte)
    Dim GInput(0 To 1) As GENERALINPUT
    Dim KInput As KEYBDINPUT
    KInput.wVk = bKey  'the key we're going to press
    KInput.dwFlags = 0 'press the key
    'copy the structure into the input array's buffer.
    GInput(0).dwType = INPUT_KEYBOARD   ' keyboard input
    CopyMemory GInput(0).xi(0), KInput, Len(KInput)
    'do the same as above, but for releasing the key
    KInput.wVk = bKey  ' the key we're going to realease
    KInput.dwFlags = KEYEVENTF_KEYUP  ' release the key
    GInput(1).dwType = INPUT_KEYBOARD  ' keyboard input
    CopyMemory GInput(1).xi(0), KInput, Len(KInput)
    'send the input now
    Call SendInput(2, GInput(0), Len(GInput(0)))
End Sub


Ну товарищи! Пользуйтесь же API-Guide, наконец!


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

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

Сейчас этот форум просматривают: Google-бот и гости: 27

    TopList  
cron