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

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

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

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

regsvr32.exe «C:WINDOWSsystem32dynwrap.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»);

23 Comments

  1. Diversus

    Может лучше использовать для таких целей Punto Switcher только он круче, он умеет сам определять нужно переключить клавиатуру при наборе или нет 🙂

    Reply
  2. Serg23ru

    Может, я им не пользуюсь. Но пользователи которым я сделал средствами 1С очень довольны, хотя у одного из них есть Punto Switcher.

    Reply
  3. ShantinTD

    Помню поставил я этот Пунто Свитчер на ноутбук себе… Одного дня не вытерпел — снес на фиг.

    Так что за топик ставлю плюс.

    Reply
  4. TMV

    (3) ShantinTD, вы просто не умеете его готовить)

    Reply
  5. smitti911

    Punto Switcher хорошая штука, надо просто немного настроить под себя и все 🙂

    Reply
  6. ShantinTD

    Да был он у меня настроен. На настольном компе. А на ноутбук — замучился настраивать. Проще оказалось смотреть в монитор когда набираешь текст. Как возможную причину вижу неполноразмерную клавиатуру ноутбука или специальные клавиши на ней. Да и было это лет 6-7 назад. Хочется верить (но нет желания проверять), что с тех пор пунто свитчер стал умнее.

    Reply
  7. yuraos

    (3) ShantinTD,

    ага…

    особенно после того как он тебе пароль с английского на русский «переведет»

    а там — набор матерных слов…без пробела.

    Reply
  8. Virikus

    Допишите в описание, что длл-ка позволяет программно переключать клавиатуру.

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

    Еще можно привести пример, типа: Реквизит ЛатНаименование должен заполняться только латинскими символами, соответственно перед редактирование переключаем раскладку.

    Reply
  9. Abadonna

    Чем ставить DLL только ради переключения , да еще с регистрацией в реестре (а проблемки могут возникнуть с правами), проще поставить полнофункциональную ВК:

    Miracle Native — ВК для V8

    у которой в классе System есть методы «РУС» и «АНГЛ»

    Reply
  10. ShantinTD

    (7) yuraos, про пароль это точно подмечено. Один знакомый до сих пор заходит в базу только с четвертого раза. 🙂 Благодаря пунто свитчеру. Кстати, тоже на ноутбуке.

    Да и что-то помнится как у него пунто свитчер «переводит» код на языке 1С (без пробелов то есть) на английский язык.

    Reply
  11. andrewks

    метод был описан ещё сто лет назад на сером форуме

    Reply
  12. andrewks
  13. andrewks

    ссылка на первоисточник не указана, длл-ка вложена в файлы для скачки (за $m)

    минусовать не буду, но недовольство выскажу

    Reply
  14. webester

    Было же уже: http://infostart.ru/public/20466/

    Reply
  15. Shrek2015

    мне тоже не нравится пунто свитчер 🙂

    Reply
  16. MishaD

    (15) Им можно по разному пользоваться. Я автопереключение отключил, а пользуюсь переключением языка по правому CTRL(очень удобно), и ручным исправлением раскладки по Shift+Break.

    Reply
  17. Sjawa2004

    (16) MishaD, Полностью согласен! Настройте правильно и будет вам счастье!!!

    Reply
  18. vec435

    (9) Abadonna, в Miracle Native нужно добавлять еще какие-то методы по необходимости, а через dynwrap.dll можно получить к WinAPI

    Reply
  19. Abadonna

    (18) vec435, в ней есть метод CallDLLMethod, а там «завинапишиться» можно по самые уши 😉

    Reply
  20. mk314

    При регистрации dll с помощью regsvr32 ошибка — модуль dynwrap.dll загружен, но не удалось выполнить вызов DLLRegisterserver

    Reply
  21. Serg23ru

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

    Reply
  22. dikd

    На Win2008Server 64bit DLL не регистрируется (((

    Reply
  23. psa247

    (3) ShantinTD, и пароли Пунто хорошо палит)))) еще и в логи пишет

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *