VBS раскладка клавиатуры
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
_D_V_S_,
Я же говорил, так нельзя. Но можно посмотреть в реестре, какая комбинация выбрана, и послать её. Здесь есть проблема, о которой написал Flasher - если языков ввода более 1.
Flasher,
Кстати, проблема решаема. В упомянутом мной ключе реестра указан порядок переключения раскладок (значение с именем 1 - раскладка по умолчанию, с именем 2 - следующая за ней, и т.д.). Можно найти номер нужной из них и послать комбинацию для переключения нужное число раз.
Я же говорил, так нельзя. Но можно посмотреть в реестре, какая комбинация выбрана, и послать её. Здесь есть проблема, о которой написал Flasher - если языков ввода более 1.
Flasher,
Кстати, проблема решаема. В упомянутом мной ключе реестра указан порядок переключения раскладок (значение с именем 1 - раскладка по умолчанию, с именем 2 - следующая за ней, и т.д.). Можно найти номер нужной из них и послать комбинацию для переключения нужное число раз.
_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) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Спасибо!Flasher писал(а):_D_V_S_, как-то так:
Запустил попробовать.
программа1 = блокнот
программа2 = вордпад
Так?
На обоих русский язык....
А мне надо, чтобы на программа1 был русский, а на программа2 - английский. Автоматом выставлялся...
В этом и смысл VBS - одна программа требует ввода текста на русском языке, вторая - на английском.
К сожалению - в обоих случаях опять русский.Flasher писал(а):_D_V_S_
Пардон, не тот символ поставил. Сейчас как надо.
Мало того, процессы wscript.exe остаются висеть после закрытия блокнота и вордпада и почему-то очень сильно подтормаживают систему. Пришлось убивать их руками.
Я как делаю:
1) Запускаю Ваш VBS и выбираю ДА. Открывается блокнот. Печатаю. Русская раскладка. Альт+F4 на блокноте.
2) Запускаю Ваш VBS и выбираю НЕТ. Открывается вордпад. Печатаю. Русская раскладка. Альт+F4 на вордпаде.
И после нескольких таких запусков - система дико тормозит - потому что процессы wscript.exe не завершаются и мало того - начинаются дикие тормоза из-за них. Пока их руками не убьёшь...
_D_V_S_
Причины точной пока понять не могу. На XP всё работает как надо. На 7-ке процесс wscript действительно висит, но переключение происходит на нужный язык ввода. Проблема в 4 строке снизу. Вечером посмотрю.
Причины точной пока понять не могу. На XP всё работает как надо. На 7-ке процесс wscript действительно висит, но переключение происходит на нужный язык ввода. Проблема в 4 строке снизу. Вечером посмотрю.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
У меня не происходит почему-то...Flasher писал(а):_D_V_S_
переключение происходит на нужный язык ввода.
Панто-Свитчер может быть камнем преткновения?
Пробовал и без него (закрывал его) - всё одно только русский включается...
Да, у меня на Контрол+Шифт переключение языка. Может в этом дело?
ЗЫ Win7x64
Он может сыграть роль только при наборе текста, первые символы всё равно должны соответствовать требованиям._D_V_S_ писал(а):Панто-Свитчер может быть камнем преткновения?
Так всё предусмотрено. И кол-во языков и клавиши. Я для чего комментарии-то в скрипте написал? К тому же я тестировал с установкой всех возможных комбинаций._D_V_S_ писал(а):Может в этом дело?
У кого ещё x64, протестируйте, пож-та!
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
- LonerD
- Сообщения: 1174
- Зарегистрирован: Вт янв 04, 2011 03:56
- Откуда: Макеевка
- Контактная информация:
Работает, но не переключение на определённый язык, а просто циклическое переключение раскладок при вызове блокнота.У кого ещё x64, протестируйте, пож-та!
У меня Win8x64, раскладки En-Ru-Uk.
При запуске блокнота - раскладка переключается на следующую, при запуске WordPadа - остаётся текущей. Например, если раскладка выставленная русская, то после запуска блокнота переключается на украинскую, после запуска ворда - так и остаётся русской.
После запуска WordPadа - wscript висит в памяти и действительно нехило нагружает процессор фактически на 100%
Windows 11 | TC DreamLair eternal pre-α
Ясно. Значит, в нём дело. Собственно, запрос конкретно на него не был, так что не так страшно. Пишите путь к нужному редактору.LonerD писал(а):После запуска WordPadа - wscript висит в памяти и действительно нехило нагружает процессор фактически на 100%
А где он там выбирается?MVV писал(а):а язык ввода, выбранный в родительском приложении
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
MVV
Понял, тут только ActivateKeyboardLayout..
_D_V_S_, LonerD
Кстати, если поменять "%WinDir%\write.exe" на
"%PROGRAMFILES%\Windows NT\Accessories\wordpad.exe", то WScript висеть не будет.
Понял, тут только ActivateKeyboardLayout..
_D_V_S_, LonerD
Кстати, если поменять "%WinDir%\write.exe" на
"%PROGRAMFILES%\Windows NT\Accessories\wordpad.exe", то WScript висеть не будет.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.