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

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

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

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

Сообщение Flasher »

_D_V_S_
Мы уже это обсудили. Всё утыкается в три и более языка ввода.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

_D_V_S_,
Я же говорил, так нельзя. Но можно посмотреть в реестре, какая комбинация выбрана, и послать её. Здесь есть проблема, о которой написал Flasher - если языков ввода более 1.

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

Сообщение Flasher »

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

Сообщение Flasher »

_D_V_S_, как-то так:

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

' Запуск редакторов с переключением языка ввода на нужный

Set Dict = CreateObject("Scripting.Dictionary")
Dim WSH : Set WSH = CreateObject("WScript.Shell")

' Читаем значение ключа смены языка ввода:
Language = WSH.RegRead("HKCU\Keyboard Layout\Toggle\Hotkey")

' Проходимся по списку языков ввода, запоминая значения в коллекции:
On Error Resume Next
For i = 1 to 10
  Key = WSH.RegRead("HKCU\Keyboard Layout\Preload\" & i)
  If Err.Number > 0 Then Exit For
  Dict.Add Key, i
Next : On Error GoTo 0

' Устанавливаем, под какими номерами идут требуемые языки:
ENG = Dict.Item("00000409") : RUS = Dict.Item("00000419")

' Устанавливаем вызываемую впоследствии комбинацию клавиш:
Select Case Language
  Case 1 HK = "%+" : Case 2 HK = "^+" : Case 4 HK = "`"
End Select

' Настраиваем кнопки диалога сообщения:
Msg = MsgBox("Нажмите Да для перехода в блокнот," & vbnewLine & _
"Нет - для перехода в WordPad" & vbnewLine & "Отмена - для других действий", 4099)
If Msg = 6 Then
  Run "notepad", RUS, HK
ElseIf Msg = 7 Then Run "%WinDir%\write.exe", ENG, HK
ElseIf Msg = 2 Then WScript.Echo "Другие действия!"
End If

' Выгружаем скрипт:
Set Dict = Nothing : Set WSH = Nothing : WScript.Quit

' Процедура вызова программ
Sub Run(Program, Lang, HKey)
  ' Вычисляем требуемое кол-во нажатий хоткея переключения раскладки:
  If Lang = 1 Then Count = 0 Else Count = Lang - 1
  ' Запускаем редактор и активируем его окно:
  Set ApExec = WSH.Exec(Program) : PID = ApExec.ProcessID
  Do : A = WSH.AppActivate(PID) : Loop Until A : WScript.Sleep 40
  ' Нажимаем хоткей смены языка нужное число раз:
  If Count Then : For n = 1 To Count : WSH.SendKeys HKey : Next : End If
End Sub
Последний раз редактировалось Flasher Ср апр 10, 2013 10:21, всего редактировалось 1 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
_D_V_S_
Сообщения: 39
Зарегистрирован: Сб янв 31, 2009 22:49

Сообщение _D_V_S_ »

Flasher писал(а):_D_V_S_, как-то так:
Спасибо!

Запустил попробовать.

программа1 = блокнот
программа2 = вордпад
Так?

На обоих русский язык....

А мне надо, чтобы на программа1 был русский, а на программа2 - английский. Автоматом выставлялся...
В этом и смысл VBS - одна программа требует ввода текста на русском языке, вторая - на английском.
Аватара пользователя
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_ »

Flasher писал(а):_D_V_S_
Пардон, не тот символ поставил. Сейчас как надо.
К сожалению - в обоих случаях опять русский.

Мало того, процессы wscript.exe остаются висеть после закрытия блокнота и вордпада и почему-то очень сильно подтормаживают систему. Пришлось убивать их руками.

Я как делаю:
1) Запускаю Ваш VBS и выбираю ДА. Открывается блокнот. Печатаю. Русская раскладка. Альт+F4 на блокноте.
2) Запускаю Ваш VBS и выбираю НЕТ. Открывается вордпад. Печатаю. Русская раскладка. Альт+F4 на вордпаде.

И после нескольких таких запусков - система дико тормозит - потому что процессы wscript.exe не завершаются и мало того - начинаются дикие тормоза из-за них. Пока их руками не убьёшь...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение _D_V_S_ »

Flasher писал(а):_D_V_S_
переключение происходит на нужный язык ввода.
У меня не происходит почему-то...
Панто-Свитчер может быть камнем преткновения?
Пробовал и без него (закрывал его) - всё одно только русский включается...
Да, у меня на Контрол+Шифт переключение языка. Может в этом дело?

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

Сообщение Flasher »

_D_V_S_ писал(а):Панто-Свитчер может быть камнем преткновения?
Он может сыграть роль только при наборе текста, первые символы всё равно должны соответствовать требованиям.
_D_V_S_ писал(а):Может в этом дело?
Так всё предусмотрено. И кол-во языков и клавиши. Я для чего комментарии-то в скрипте написал? К тому же я тестировал с установкой всех возможных комбинаций.

У кого ещё x64, протестируйте, пож-та!
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

У кого ещё x64, протестируйте, пож-та!
Работает, но не переключение на определённый язык, а просто циклическое переключение раскладок при вызове блокнота.
У меня Win8x64, раскладки En-Ru-Uk.
При запуске блокнота - раскладка переключается на следующую, при запуске WordPadа - остаётся текущей. Например, если раскладка выставленная русская, то после запуска блокнота переключается на украинскую, после запуска ворда - так и остаётся русской.
После запуска WordPadа - wscript висит в памяти и действительно нехило нагружает процессор фактически на 100%
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

Сообщение Flasher »

LonerD писал(а):После запуска WordPadа - wscript висит в памяти и действительно нехило нагружает процессор фактически на 100%
Ясно. Значит, в нём дело. Собственно, запрос конкретно на него не был, так что не так страшно. Пишите путь к нужному редактору.
MVV писал(а):а язык ввода, выбранный в родительском приложении
А где он там выбирается?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

Сообщение Flasher »

MVV
Понял, тут только ActivateKeyboardLayout..

_D_V_S_, LonerD
Кстати, если поменять "%WinDir%\write.exe" на
"%PROGRAMFILES%\Windows NT\Accessories\wordpad.exe", то WScript висеть не будет.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить