gifts2017

1С 8.2 переключение раскладки клавиатуры (с помощью dynwrap.dll)

Опубликовал Сергей Сурков (Serg23ru) в раздел Программирование - Внешние компоненты

Функция для автоматического переключения раскладки клавиатуры. (с помощью dynwrap.dll)
Дабы не переключать каждый раз (при вводе информации в разных полях) с "Rus" на "Eng", можно эту работу возложить на функцию.

Мэханизм работает так:

1) регистрируем dll-ку в операционке:  

regsvr32.exe "C:\WINDOWS\system32\dynwrap.dll"

2) Создаем функцию на сервере: 

Функция  ПереключитьРаскладкуDW(Имя) Экспорт
    Попытка
        Wrapper = новый COMОбъект("DynamicWrapper");
        Wrapper.Register("USER32.DLL", "ActivateKeyboardLayout", "i=ll", "f=s", "r=l");
        Wrapper.Register("USER32.DLL", "LoadKeyboardLayout", "i=sl", "f=s", "r=t");
        
    Исключение
        Возврат Истина;
    КонецПопытки;
    
    SRus = "00000419";
    SEng = "00000409";
    
    NRus = 1049;
    NEng = 1033;
    
    Попытка
        Если Нрег(Имя) = Нрег("Rus") тогда
            Wrapper.LoadKeyboardLayout(SRus, 1);
            Wrapper.ActivateKeyboardLayout(NRus, 0);    
        Иначе    
            Wrapper.LoadKeyboardLayout(SEng, 1);
            Wrapper.ActivateKeyboardLayout(NEng, 0);    
        КонецЕсли;
        возврат Ложь;
    Исключение
        Возврат Истина;
    КонецПопытки;
КонецФункции

 

3) Запускаем функцию (в моем случае при открытии формы справочника):

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    //переключим раскладку на английскую
    Раскл = ФункцииНасервере.ПереключитьРаскладкуDW("Eng");    
КонецПроцедуры

 

Для возврата обратно на русскую пишем:
Раскл = ФункцииНасервере.ПереключитьРаскладкуDW("Rus");




Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
dynwrap.dll
.dll 36,00Kb
22.05.13
42
.dll 36,00Kb 42 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Виталий Барилко (Diversus) 22.05.13 16:02
Может лучше использовать для таких целей Punto Switcher только он круче, он умеет сам определять нужно переключить клавиатуру при наборе или нет :)
2. Сергей Сурков (Serg23ru) 22.05.13 16:13
Может, я им не пользуюсь. Но пользователи которым я сделал средствами 1С очень довольны, хотя у одного из них есть Punto Switcher.
3. Тимофей Шантин (ShantinTD) 22.05.13 17:17
Помню поставил я этот Пунто Свитчер на ноутбук себе... Одного дня не вытерпел - снес на фиг.
Так что за топик ставлю плюс.
psa247; NazarovV; cleaner_it; PowerBoy; +4 Ответить 3
4. TMV 22.05.13 19:43
(3) ShantinTD, вы просто не умеете его готовить)
borrman; Astafan; +2 Ответить
5. Александр Гнитка (smitti911) 23.05.13 09:19
Punto Switcher хорошая штука, надо просто немного настроить под себя и все :)
6. Тимофей Шантин (ShantinTD) 23.05.13 13:15
Да был он у меня настроен. На настольном компе. А на ноутбук - замучился настраивать. Проще оказалось смотреть в монитор когда набираешь текст. Как возможную причину вижу неполноразмерную клавиатуру ноутбука или специальные клавиши на ней. Да и было это лет 6-7 назад. Хочется верить (но нет желания проверять), что с тех пор пунто свитчер стал умнее.
7. Юрий Осипов (yuraos) 23.05.13 14:21
(3) ShantinTD,
ага...
особенно после того как он тебе пароль с английского на русский "переведет"
а там - набор матерных слов...без пробела.
AlexanderKai; ShantinTD; cleaner_it; +3 Ответить 1
8. Virikus 23.05.13 14:34
Допишите в описание, что длл-ка позволяет программно переключать клавиатуру.

А то сразу не совсем понятно, чего она делает.

Еще можно привести пример, типа: Реквизит ЛатНаименование должен заполняться только латинскими символами, соответственно перед редактирование переключаем раскладку.
cleaner_it; +1 Ответить
9. Аркадий Кучер (Abadonna) 24.05.13 08:44
Чем ставить DLL только ради переключения , да еще с регистрацией в реестре (а проблемки могут возникнуть с правами), проще поставить полнофункциональную ВК:
Miracle Native - ВК для V8
у которой в классе System есть методы "РУС" и "АНГЛ"
10. Тимофей Шантин (ShantinTD) 24.05.13 10:26
(7) yuraos, про пароль это точно подмечено. Один знакомый до сих пор заходит в базу только с четвертого раза. :) Благодаря пунто свитчеру. Кстати, тоже на ноутбуке.
Да и что-то помнится как у него пунто свитчер "переводит" код на языке 1С (без пробелов то есть) на английский язык.
11. andrewks 24.05.13 19:05
метод был описан ещё сто лет назад на сером форуме
13. andrewks 24.05.13 19:08
ссылка на первоисточник не указана, длл-ка вложена в файлы для скачки (за $m)

минусовать не буду, но недовольство выскажу
14. Роман Ложкин (webester) 25.05.13 03:57
15. Shrek Shrek (Shrek2015) 25.05.13 09:45
мне тоже не нравится пунто свитчер :)
16. Михаил (MishaD) 25.05.13 15:50
(15) Им можно по разному пользоваться. Я автопереключение отключил, а пользуюсь переключением языка по правому CTRL(очень удобно), и ручным исправлением раскладки по Shift+Break.
17. Вячеслав Иванов (Sjawa2004) 28.05.13 08:45
(16) MishaD, Полностью согласен! Настройте правильно и будет вам счастье!!!
18. Владимир Чаклин (vec435) 29.05.13 09:56
(9) Abadonna, в Miracle Native нужно добавлять еще какие-то методы по необходимости, а через dynwrap.dll можно получить к WinAPI
19. Аркадий Кучер (Abadonna) 29.05.13 15:07
(18) vec435, в ней есть метод CallDLLMethod, а там "завинапишиться" можно по самые уши ;)
20. Михаил Калачев (mk314) 02.07.13 12:25
При регистрации dll с помощью regsvr32 ошибка - модуль dynwrap.dll загружен, но не удалось выполнить вызов DLLRegisterserver
21. Сергей Сурков (Serg23ru) 02.07.13 15:05
Может удалить из системы тот который был и поставить новый?
22. Андрей Стручалин (dikd) 23.09.13 19:34
На Win2008Server 64bit DLL не регистрируется (((
user599897_petrenko.ax; aupovy; +2 Ответить
23. Сергей Иванов (psa247) 09.09.16 16:21
(3) ShantinTD, и пароли Пунто хорошо палит)))) еще и в логи пишет
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа