Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/26: Рейтинг темы: голосов - 26, средняя оценка - 4.58
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
1

Программно установить Русскую раскладку клавиатуры (именно установить, не активировать)

27.01.2014, 10:57. Показов 5181. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прошу помощи.
Необходимо Программно установить Русскую раскладку клавиатуры в английскую версию Windows (именно установить, не активировать).
долго ищу - не могу найти.

Помогите...

А то везде только и говорят как активировать уже установленную.

Я понимаю что установить надо kbdru.dll из папки Windows/system32, но как это сделать?

Подскажите. Очень нужно...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2014, 10:57
Ответы с готовыми решениями:

Программно JS установить раскладку клавиатуры с русского на английский и обратно
Надо программно установить раскладку клавиатуры с русского на английский и обратно (функцию надо на...

Установить английскую раскладку клавиатуры
Актуально. Задача. При загрузке программы должна устанавливаться английская раскладка клавиатуры....

Windows 2000 - как установить раскладку клавиатуры ?
Izvenite chto pishu na translite - v etom sobstvenno i problemma. Nemogu postavit Russkuy...

Как программно сменить раскладку клавиатуры
Подскажите пожалуйста, как сменить раскладку клавиатуры на английскую, если в системе установлено...

23
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
27.01.2014, 11:44 2
Не совсем понятно что ты имеешь в виду.
Если установить саму библиотеку, то смотри в реестре HKLM\SYSTEM\CurrentControlSet\Control\KeyboardLayouts\
Потом прост загружаешь через LoadKeyboardLayout
0
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
27.01.2014, 15:08  [ТС] 3
Цитата Сообщение от The trick Посмотреть сообщение
Не совсем понятно что ты имеешь в виду.
Если установить саму библиотеку, то смотри в реестре HKLM\SYSTEM\CurrentControlSet\Control\KeyboardLayouts\
Потом прост загружаешь через LoadKeyboardLayout
Да в реестре она имеется.

А по нажатию на значок раскладки в сис.трее ее нет, а мне нужно что она там появилась...
а при необходимости - была возможность удалить ее...

Добавлено через 6 минут
Цитата Сообщение от The trick Посмотреть сообщение
Не совсем понятно что ты имеешь в виду.
Если установить саму библиотеку, то смотри в реестре HKLM\SYSTEM\CurrentControlSet\Control\KeyboardLayouts\
Потом прост загружаешь через LoadKeyboardLayout
Вобщем объясню задумку:

Я работаю там где нет русских систем вообще, только английская, и иногда нужна русская раскладка в системе для набора русского текста, но так как за этим компьютером работают еще и иностранцы, которым русская раскладка совсем не нужна, мне нужна возможность и отключать ее.

Эту задумку я хочу поместить во что-то типа виджета на раб столе и при нажатии на него раскладка грузилась и можно было на нее переключиться стандартными Alt+Shift... а при отключении - раскладка отключалась и в системе оставался только английский...

помогите. очень нужно... Виртуальную клавиатуру писать не хочу... проще подгружать раскладку временно, так как на клавиатуре русские буквы нарисованы и проще пользоваться физической, но держать постоянно русскую раскладку в системе нельзя...
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
27.01.2014, 15:31 4
Непонятно, почему в VB6?
Там вроде всё просто ( на русской Винде названия, по Английски думаю подобные) - Панель управления -> Языки региональные стандарты-> Подробно, Языки и службы текстового ввода, кнопка "Добавить", и добавляете хоть Японский, хоть Русский.
Не нужен? Кнопка "Удалить".
На все манипуляции ровно 20 секунд, зачем нужен лишний софт?
0
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
27.01.2014, 15:42  [ТС] 5
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Непонятно, почему в VB6?
Там вроде всё просто ( на русской Винде названия, по Английски думаю подобные) - Панель управления -> Языки региональные стандарты-> Подробно, Языки и службы текстового ввода, кнопка "Добавить", и добавляете хоть Японский, хоть Русский.
Не нужен? Кнопка "Удалить".
На все манипуляции ровно 20 секунд, зачем нужен лишний софт?
это все понятно, но мне необходимо именно через VB это реализовать...
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
27.01.2014, 16:04 6
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Цитата Сообщение от Юрий Косар Посмотреть сообщение
через VB это реализовать...
Полуавтомат:
Visual Basic
1
2
3
4
5
6
7
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1
Private Sub Command1_Click()
 
ShellExecute Me.hwnd, vbNullString, "C:\WINDOWS\system32\intl.cpl", vbNullString, "C:\", SW_SHOWNORMAL
 
End Sub
Автомат, но тут надо экспериментировать. Общее направление - запуск intl.cpl с параметрами
intl.cpl,,/f:"c:\locale.txt"

А в тексте( для XP) то, что надо, только для кириллицы.
[RegionalSettings]
Language=0401
LanguageGroup=13
SystemLocale=0401
UserLocale=0401
InputLocale=0409:00000409,0401:00000401
Для win7 не txt, а xml
<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
<gs:UserList>
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/>
</gs:UserList>
<gs:InputPreferences>
<!--en-US--><gs:InputLanguageID Action="add" ID="0409:00000409" Default="true"/>
<!--remove-es-Int--><gs:InputLanguageID Action="remove" ID="0c0a:0000040a"/>
<!--en-Int--><gs:InputLanguageID Action="add" ID="0409:00020409"/>
<!--zh-CH--><gs:InputLanguageID Action="add" ID="0804:{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{F3BA9077-6C7E-11D4-97FA-0080C882687E}"/>
<!--zh-TW--><gs:InputLanguageID Action="add" ID="0404:{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{761309DE-317A-11D4-9B5D-0080C882687E}"/>
<!--jp-JP--><gs:InputLanguageID Action="add" ID="0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}"/>
</gs:InputPreferences>
<!-- system locale --><gs:SystemLocale Name="en-US" />
</gs:GlobalizationServices>
В общем ищи в этом направлении.
Если окно с настройками языков не запускается, то причина может быть в отсутствии библиотеки sfcfiles.dll в папке \windows\system32. Просто перезаписать с той системы, где она есть.
3
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
27.01.2014, 16:14  [ТС] 7
буду пробовать...

спасибо
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
27.01.2014, 16:21 8
Так проще запустить, без API
Visual Basic
1
ID = Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1", vbNormalFocus)
2
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
27.01.2014, 17:44 9
А LoadKeyboardLayout не работает что-ли? Если запись в реестрее есть то она должна отработать и загрузить нужную раскладку.
0
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
27.01.2014, 19:42  [ТС] 10
Цитата Сообщение от The trick Посмотреть сообщение
А LoadKeyboardLayout не работает что-ли? Если запись в реестрее есть то она должна отработать и загрузить нужную раскладку.
не работает...
может она и загрузит ее, но возможности выбора раскладок не будет и преключаться между русс и англ ты не сможешь...

Добавлено через 3 минуты
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Так проще запустить, без API
Visual Basic
1
ID = Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1", vbNormalFocus)
да. но тут она открывает окно для выбора...
а мне оно не нужно, а нужно по тихому провернуть операцию добавления или удаления нужной раскладки...

Добавлено через 7 минут
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Автомат, но тут надо экспериментировать. Общее направление - запуск intl.cpl с параметрами
intl.cpl,,/f:"c:\locale.txt"
А в тексте( для XP) то, что надо, только для кириллицы.
[RegionalSettings]
Language=0401
LanguageGroup=13
SystemLocale=0401
UserLocale=0401
InputLocale=0409:00000409,0401:00000401
Для win7 не txt, а xml
<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
<gs:UserList>
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/>
</gs:UserList>
<gs:InputPreferences>
<!--en-US--><gs:InputLanguageID Action="add" ID="0409:00000409" Default="true"/>
<!--remove-es-Int--><gs:InputLanguageID Action="remove" ID="0c0a:0000040a"/>
<!--en-Int--><gs:InputLanguageID Action="add" ID="0409:00020409"/>
<!--zh-CH--><gs:InputLanguageID Action="add" ID="0804:{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{F3BA9077-6C7E-11D4-97FA-0080C882687E}"/>
<!--zh-TW--><gs:InputLanguageID Action="add" ID="0404:{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{761309DE-317A-11D4-9B5D-0080C882687E}"/>
<!--jp-JP--><gs:InputLanguageID Action="add" ID="0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}"/>
</gs:InputPreferences>
<!-- system locale --><gs:SystemLocale Name="en-US" />
</gs:GlobalizationServices>

вот с этим не понял чуток...

вобщем я так понял что выполняю:
Цитата Сообщение от Pro_grammer Посмотреть сообщение
запуск intl.cpl с параметрами intl.cpl,,/f:"c:\locale.txt"
при помощи Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1", vbHide)


но перед этим создаю c:\locale.txt или .xml с нужным текстом..?

тоесть делаю так?: Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,/f:""c:\locale.txt""", vbHide)

верно?
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
27.01.2014, 20:39 11
Цитата Сообщение от Юрий Косар Посмотреть сообщение
верно?
В теории да.Только правильно в Бейсике так:
Visual Basic
1
A = Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,/f:" & Chr(34) & "c:\locale.txt" & Chr(34), vbHide)
А на практике надо иметь английскую Винду и тестировать.
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
27.01.2014, 22:22 12
Цитата Сообщение от Юрий Косар Посмотреть сообщение
не работает...
может она и загрузит ее, но возможности выбора раскладок не будет и преключаться между русс и англ ты не сможешь...
Или я тебя не понял, или ты что-то не то делаешь. Вот загрузка немецкой раскладки из VB6.
Миниатюры
Программно установить Русскую раскладку клавиатуры (именно установить, не активировать)  
1
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
28.01.2014, 19:57  [ТС] 13
Беда... через loadkeyboardlayout она ее грузит но не устанавливает... тоесть она в трее доступна а вот через стандартное окно ее не удалить - так каа там ее нет ((
A через shell она ставится правильно...

Вторая беда... с помошья апи UnloadKeyboardLayout она не удаляется... или может я чтото не правильно делаю?

Я делаю так UnloadKeyboardLayout "00000419" и нифига

Добавлено через 7 минут
И еще, я извиняюсь, вопрос не по теме - пока не забыл, спросить хочу, у тебя на семерке при перемещении кнопок всего осталтного бэйсик тоже глючит, тормозит и мерцает? И как это исправить а то оч не комфортно.

Добавлено через 2 минуты
Да извиняюсь, ошибся, Latout ее грузит, не полноценно почему то.
И удалить не могу программно...
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
28.01.2014, 20:05 14
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Цитата Сообщение от Юрий Косар Посмотреть сообщение
Я делаю так UnloadKeyboardLayout "00000419" и нифига
Потому что ты делаешь неправильно, почитай сначала как используеться эта API функция
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
 
Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Private Declare Function UnloadKeyboardLayout Lib "user32" (ByVal HKL As Long) As Long
Private Const KLF_ACTIVATE = &H1
Private Const KLF_SETFORPROCESS = &H100
 
Dim hKlm As Long
 
Private Sub Form_Load()
    hKlm = LoadKeyboardLayout("00000407", KLF_ACTIVATE Or KLF_SETFORPROCESS)
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
    UnloadKeyboardLayout hKlm
End Sub
Цитата Сообщение от Юрий Косар Посмотреть сообщение
И еще, я извиняюсь, вопрос не по теме - пока не забыл, спросить хочу, у тебя на семерке при перемещении кнопок всего осталтного бэйсик тоже глючит, тормозит и мерцает? И как это исправить а то оч не комфортно.
1
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
28.01.2014, 20:15  [ТС] 15
Ё-моё... вот я подвис на такой мелочи... блин спасибо...
Но я смогу выгрузить только во время выполнения кода. А как быть если раскладка вче еще в системе, но приложение уже закрыто... в итоге при запуске придется снова активировать чтобы потом выгрузить?
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
28.01.2014, 20:17 16
Цитата Сообщение от Юрий Косар Посмотреть сообщение
Но я смогу выгрузить только во время выполнения кода. А как быть если раскладка вче еще в системе, но приложение уже закрыто... в итоге при запуске придется снова активировать чтобы потом выгрузить?
Как такое может быть? Ты ставь на Unload выгрузку и, если код написан без ошибок, он всегда будет выгружать раскладку.
0
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
28.01.2014, 20:22  [ТС] 17
А если мне нужно подержать раскладку какое то время в системе но приложение должно быть не активно? Это возможно?
Тем не менее. Спасибо большое... думаю проблема решится...
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
28.01.2014, 20:25 18
Цитата Сообщение от Юрий Косар Посмотреть сообщение
А если мне нужно подержать раскладку какое то время в системе но приложение должно быть не активно? Это возможно?
Тем не менее. Спасибо большое... думаю проблема решится...
Ты можешь скрыть окно, сделать безоконное приложение, либо сделать при каждом включении программа будет, то загружать, то выгружать. Вариантов масса.
0
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
28.01.2014, 21:07  [ТС] 19
Да. Я поиграюсь... наверно этот вариант удобный именно для Run time... а через пожизненно ))) к тому ж там еще и локализация начтраиваться может. По желанию...
Вобщем всё. Я все понял... спс...!
И кстати про проблему с перемещением. Спасибо за счылку. Так все элементарно блин... а я уже несколтко лет плююсь!! Думал это не реально исправить...

Добавлено через 5 минут
Pro_grammer, а через Shell как нужную мне раскладку можно удалить? Разбирался с txt и xml не нашел..

Добавлено через 30 минут
Как я и предполагал. Щас проверил в англ системе Windows. Раскладку устанавливает но по умолчанию там не стояло никаких горячих клавиш на смену раскладок... и плэтому я т не могу переключиться их... как в VB6 задать горячие клавиши на смену раскладок? То что активировать раскладку модно это да. И как программно сделать свои клавиши тоже. Но как чистемные горячие клавиши активировать, такие как alt+shift или ctrl+shift?
Это можно через апи сделать или внутренними функциями бэйсика? Или же снова через shell это провернуть?

Надеюсь что такое есть. Отпишите кто знает плииз...
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
28.01.2014, 21:13 20
HKEY_USERS\Keyboard Layout\Toggle ключ Language Hotkey
Когда он имеет значение 1, язык переключается через левые Alt+Shift, когда 2, то через левые Crtl+Shift.
1
28.01.2014, 21:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2014, 21:13
Помогаю со студенческими работами здесь

Как программно определить текущую раскладку клавиатуры?
Хочу написать для себя небольшую программку, которая будет постоянно показывать на экране монитора...

Могу я установить Management Studio русскую?
День добрый. Если у меня установлен английский MS SQL Server, могу я установить Management...

Установить в консоле при запуске раскладку dvorak
Как установить расскладку dvorak по умолчанию в консоле?? Так что б при старте была именно эта...

Программно эмулировать нажатие клавиш, различая регистр и раскладку клавиатуры
Функция keybd_event корректно воспринимает только большие латинские буквы. Регистр и раскладка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru