VBS раскладка клавиатуры

Обсуждение любых программ, не имеющих отношения к Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
_D_V_S_
Сообщения: 39
Зарегистрирован: Сб янв 31, 2009 22:49

VBS раскладка клавиатуры

Сообщение _D_V_S_ »

Доброе время суток!

Подскажите, как реализовать в VBS переключение языковой раскладки?

То есть у меня рабочий VBS с выбором запуска двух программ. Для одной нужно писать по-английски, для другой - по-русски. Надо вставить код переключения раскладки языка (или как это правильно называется - ХЗ...)

Думал как корректно это организовать.

1) считываем с реестра необходимые ветки. -> сохраняем их.
2) заносим в реестр такую конструкцию:
- смена раскладки по Контрол+Шифт
- назначение русской раскладки на сочетание клавиш 1
- назначение английской раскладки на сочетание клавиш 2
3) WshShell.SendKeys и выполнение необходимых действий скрипта
4) удаление из реестра внесённых изменений и занесение в реестр сохранённых веток

Вот без ребута винды, "на лету", смена сочетаний клавиш и остальное с реестром - будет работать?

Помогите плиз со скриптом - я в VBS совсем начинающий!
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

_D_V_S_
С подключение сторонних компонент и API сделать, конечно, реально.
Можно также попробовать подключить js через htmlfile или ScriptControl.
Простые игры с реестром ничего не дадут.
Но лучше отказаться от метода и использовать копипаст либо сторонние утилиты типа nircmd/TCFS2.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
_D_V_S_
Сообщения: 39
Зарегистрирован: Сб янв 31, 2009 22:49

Сообщение _D_V_S_ »

Flasher писал(а):_D_V_S_
Но лучше отказаться от метода и использовать копипаст либо сторонние утилиты типа nircmd/TCFS2.
К сожалению надо именно без сторонних компонент.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

_D_V_S_ писал(а):К сожалению надо именно без сторонних компонент.
Копипаст без сторонних. Утилиты - это не компоненты. И надо - почему?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
_D_V_S_
Сообщения: 39
Зарегистрирован: Сб янв 31, 2009 22:49

Сообщение _D_V_S_ »

Я так понимаю, что средствами чистого VBS это невозможно?
Про совместное использование VBS и утилит я-бы тут даже тему не стал создавать :-)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Смотря что понимать под "чистым". Я не пойму, зачем вообще набивать посимвольно? Это же долго.
Это нужно для работы на любом Windows/любой машине или достаточно только на своей?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
_D_V_S_
Сообщения: 39
Зарегистрирован: Сб янв 31, 2009 22:49

Сообщение _D_V_S_ »

На любой, делаю не только для себя.

А метод, описанный мной в титульном сообщении, работать не будет? Почему если в двух словах?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Я так ответ на свой первый вопрос не увидел.

Внесение в реестр, может, и будет работать, но я не уверен, что ветки создаются в кусте HKCU\Control Panel\Input Method\Hot Keys\ в одной и той же последовательности при присвоении порядкового номера 000010х.
Будет зависеть от наличия существующих веток, кол-ва языков раскладки и последовательности присвоения. Не факт, что срабатывать хоткей будет с первого раза, поскольку информация о клавишах может считываться из ОЗУ или файла подкачки. Надо тестировать.
Кстати, смена раскладки по Ctrl+Shift ничего не даст, это лишнее.

Но я бы делал через DynamicWrapper без регистрации..
Да нет, я вообще бы SendKeys для буквенных клавиш не использовал..
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
_D_V_S_
Сообщения: 39
Зарегистрирован: Сб янв 31, 2009 22:49

Сообщение _D_V_S_ »

Flasher писал(а):Я так ответ на свой первый вопрос не увидел.
использовал..
На какой? "Почему надо без сторонних утилит"?

Ну так не только для себя-ж хочется сделать :-)
Один скрипт VBS с открытым кодом - это одно.
А скрипт + экзешник это совсем другое...

Да, может я не совсем понятно описал то, что мне надо.

Нужно-то просто включение нужной раскладки языка при выборе пункта мессадж-бокса.
То есть выбрал пункт первый и включается английский язык, выбрал пункт второй - включается русский язык.
И тут встаёт проверка на текущую раскладку.

Вот и ломаю голову сижу, как это сделать...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

_D_V_S_ писал(а):На какой?
>
Flasher писал(а):зачем вообще набивать посимвольно?
_D_V_S_ писал(а):А скрипт + экзешник это совсем другое...
Другое - это какое? :)
_D_V_S_ писал(а):То есть выбрал пункт первый и включается английский язык, выбрал пункт второй - включается русский язык.
И что? Каждый раз дёргать реестр, чтобы что-то набивать в нужном поле? ОВНС.
_D_V_S_ писал(а):И тут встаёт проверка на текущую раскладку.
Зачем проверка? Описывалась принудительная смена.
_D_V_S_ писал(а):Вот и ломаю голову сижу, как это сделать
Стандартными методами никак. Нестандартными, например, так:

Код: Выделить всё

With CreateObject("DynamicWrapper")
  .Register "USER32", "ActivateKeyboardLayout", "i=ll", "f=s", "r=l"
  .Register "USER32", "LoadKeyboardLayout", "i=sl", "f=s", "r=l"
  .ActivateKeyboardLayout .LoadKeyboardLayout("00000419", 0), 0
End With
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
_D_V_S_
Сообщения: 39
Зарегистрирован: Сб янв 31, 2009 22:49

Сообщение _D_V_S_ »

Flasher писал(а):зачем вообще набивать посимвольно?
Да нет )) Просто переключить раскладку языка...
_D_V_S_ писал(а):А скрипт + экзешник это совсем другое...
Flasher писал(а):Другое - это какое? :)
А объяснишь людям? )) Они видят в каждом .exe вирусную угрозу и кражу паролей)))
_D_V_S_ писал(а):То есть выбрал пункт первый и включается английский язык, выбрал пункт второй - включается русский язык.
Flasher писал(а):И что? Каждый раз дёргать реестр, чтобы что-то набивать в нужном поле?
Один раз... При выборе пункта мессадж-бокса.

А DynamicWrapper - это dll-ку надо какую регистрить стороннюю?
Неужели стандартным VBS никак нельзя поменять язык ввода? Задача вроде тривиальная...
Аватара пользователя
LonerD
Сообщения: 1173
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Они видят в каждом .exe вирусную угрозу и кражу паролей
При таком уровне паранойи наверняка и выполнение скриптов отключено в системе.
Один скрипт VBS с открытым кодом - это одно.
А скрипт + экзешник это совсем другое...
Как вариант - подключить другой скриптовый язык. Скрипт с открытым исходным кодом+исполняемый ехе-шник AutoIt3, на нём это проще организовать.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
_D_V_S_
Сообщения: 39
Зарегистрирован: Сб янв 31, 2009 22:49

Сообщение _D_V_S_ »

Нет, все варианты с экзешниками в любом виде не рассматриваются.
Только стандартные виндовозные скрипты.
Я-б тогда тему не создавал тут, а всё сам-бы давно сделал.

А уровень паранойи людей, которые называют ENTER интером - заоблачен. И ничем не прошибаем. Ну не мне вам рассказывать :)

LonerD писал(а):При таком уровне паранойи наверняка и выполнение скриптов отключено в системе.
Чтобы отключить и включить что-то в системе, нужно обладать несколько другими знаниями - при которых уровень паранойи как-бы снижается в геометрической прогрессии ;)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

_D_V_S_ писал(а):Да нет )) Просто переключить раскладку языка.
Понял. В этом случае VBS точно не подойдёт в исходном виде. Тут желателен AHK с отслеживанием контролов. В крайнем случае можно скомпилить, чтобы сторонних exe не было.
_D_V_S_ писал(а):А объяснишь людям? )) Они видят в каждом .exe вирусную угрозу и кражу паролей)
Я то объясню, если потребуется. Но пока что-то логики не улавливаю. В каждом exe видят, а в каждом скрипте не видят. :?:
_D_V_S_ писал(а):Один раз... При выборе пункта мессадж-бокса.
МэссейджБокс не имеет полей. Какой смысл в таком окне менять раскладку? О каких пунктах речь?
_D_V_S_ писал(а):А уровень паранойи людей, которые называют ENTER интером - заоблачен.
Хм. Не ваш клиент? :wink:
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
_D_V_S_
Сообщения: 39
Зарегистрирован: Сб янв 31, 2009 22:49

Сообщение _D_V_S_ »

Flasher писал(а):
_D_V_S_ писал(а):А объяснишь людям? )) Они видят в каждом .exe вирусную угрозу и кражу паролей)
Я то объясню, если потребуется. Но пока что-то логики не улавливаю. В каждом exe видят, а в каждом скрипте не видят. :?:
_D_V_S_ писал(а):Один раз... При выборе пункта мессадж-бокса.
МэссейджБокс не имеет полей. Какой смысл в таком окне менять раскладку? О каких пунктах речь?
_D_V_S_ писал(а):А уровень паранойи людей, которые называют ENTER интером - заоблачен.
Хм. Не ваш клиент? :wink:
1) Скрипт с непонятными для них кракозябрами в большинстве не вызывает такого отторжения, нежели исполняемый файл - который в их представлении напичкан червями, вирусами и другими бэк-доорами с кей-логгерами :-) Хоть они слов-то таких и в страшном сне не слышали ))))

2) Мессадж бокс имеет кнопки: Да Нет и Отмена.
Да - включается русский язык и запускается программа1, в которой в текстовые поля юзер набивает текст на русском языке
Нет - включается общепринятый буржуйский язык и запускается программа2, в которой в текстовые поля юзер набивает текст на аглицкой мове
Отмена - выполняются некоторые действия, к сабжу не имеющие отношения.


3) Гляну тред попозже :-)
Ответить