VBS раскладка клавиатуры
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3, 4, 5  Next  :| |:
Total Commander -> Программное обеспечение

#31:  Author: FlasherLocation: Москва PostPosted: Tue Apr 09, 2013 19:04
    —
_D_V_S_
Мы уже это обсудили. Всё утыкается в три и более языка ввода.

#32:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Apr 09, 2013 19:18
    —
_D_V_S_,
Я же говорил, так нельзя. Но можно посмотреть в реестре, какая комбинация выбрана, и послать её. Здесь есть проблема, о которой написал Flasher - если языков ввода более 1.

Flasher,
Кстати, проблема решаема. В упомянутом мной ключе реестра указан порядок переключения раскладок (значение с именем 1 - раскладка по умолчанию, с именем 2 - следующая за ней, и т.д.). Можно найти номер нужной из них и послать комбинацию для переключения нужное число раз.

#33:  Author: FlasherLocation: Москва PostPosted: Tue Apr 09, 2013 19:32
    —
MVV
Да, так можно, только немоментальная скорость будет.

#34:  Author: FlasherLocation: Москва PostPosted: Wed Apr 10, 2013 09:02
    —
_D_V_S_, как-то так:
Code:
' Запуск редакторов с переключением языка ввода на нужный

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


Last edited by Flasher on Wed Apr 10, 2013 10:21; edited 1 time in total

#35:  Author: _D_V_S_ PostPosted: Wed Apr 10, 2013 09:23
    —
Flasher wrote:
_D_V_S_, как-то так:

Спасибо!

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

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

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

А мне надо, чтобы на программа1 был русский, а на программа2 - английский. Автоматом выставлялся...
В этом и смысл VBS - одна программа требует ввода текста на русском языке, вторая - на английском.

#36:  Author: FlasherLocation: Москва PostPosted: Wed Apr 10, 2013 09:45
    —
_D_V_S_
Пардон, не тот символ поставил. Сейчас как надо.

#37:  Author: _D_V_S_ PostPosted: Wed Apr 10, 2013 10:51
    —
Flasher wrote:
_D_V_S_
Пардон, не тот символ поставил. Сейчас как надо.

К сожалению - в обоих случаях опять русский.

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

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

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

#38:  Author: FlasherLocation: Москва PostPosted: Wed Apr 10, 2013 15:43
    —
_D_V_S_
Причины точной пока понять не могу. На XP всё работает как надо. На 7-ке процесс wscript действительно висит, но переключение происходит на нужный язык ввода. Проблема в 4 строке снизу. Вечером посмотрю.

#39:  Author: _D_V_S_ PostPosted: Wed Apr 10, 2013 16:02
    —
Flasher wrote:
_D_V_S_
переключение происходит на нужный язык ввода.

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

ЗЫ Win7x64

#40:  Author: FlasherLocation: Москва PostPosted: Wed Apr 10, 2013 16:32
    —
_D_V_S_ wrote:
Панто-Свитчер может быть камнем преткновения?
Он может сыграть роль только при наборе текста, первые символы всё равно должны соответствовать требованиям.
_D_V_S_ wrote:
Может в этом дело?
Так всё предусмотрено. И кол-во языков и клавиши. Я для чего комментарии-то в скрипте написал? К тому же я тестировал с установкой всех возможных комбинаций.

У кого ещё x64, протестируйте, пож-та!

#41:  Author: LonerDLocation: Донецк PostPosted: Wed Apr 10, 2013 18:56
    —
Quote:
У кого ещё x64, протестируйте, пож-та!

Работает, но не переключение на определённый язык, а просто циклическое переключение раскладок при вызове блокнота.
У меня Win8x64, раскладки En-Ru-Uk.
При запуске блокнота - раскладка переключается на следующую, при запуске WordPadа - остаётся текущей. Например, если раскладка выставленная русская, то после запуска блокнота переключается на украинскую, после запуска ворда - так и остаётся русской.
После запуска WordPadа - wscript висит в памяти и действительно нехило нагружает процессор фактически на 100%

#42:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Apr 10, 2013 19:33
    —
LonerD,
Я писал выше, что способ применим вплоть до Win7 включительно, т.к. в Win8 новое приложение имеет не язык ввода по умолчанию, а язык ввода, выбранный в родительском приложении.

#43:  Author: FlasherLocation: Москва PostPosted: Wed Apr 10, 2013 20:15
    —
LonerD wrote:
После запуска WordPadа - wscript висит в памяти и действительно нехило нагружает процессор фактически на 100%
Ясно. Значит, в нём дело. Собственно, запрос конкретно на него не был, так что не так страшно. Пишите путь к нужному редактору.

MVV wrote:
а язык ввода, выбранный в родительском приложении
А где он там выбирается?

#44:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Apr 10, 2013 21:38
    —
Flasher,
Ну, например, язык ввода по умолчанию у тебя английский, ты запустил тотал и переключился в нём на русский. Теперь у программ, запускаемых из тотала (командная строка, например), начальный язык ввода будет русский.

#45:  Author: FlasherLocation: Москва PostPosted: Wed Apr 10, 2013 23:36
    —
MVV
Понял, тут только ActivateKeyboardLayout..

_D_V_S_, LonerD
Кстати, если поменять "%WinDir%\write.exe" на
"%PROGRAMFILES%\Windows NT\Accessories\wordpad.exe", то WScript висеть не будет.



Total Commander -> Программное обеспечение


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3, 4, 5  Next  :| |:
Page 3 of 5

Powered by phpBB © 2001, 2005 phpBB Group