1

Тема: VBS: Смена раскладки клавиатуры для активного окна приложения

Здравствуйте уважаемые знатоки!
Подскажите пожалуйста есть ли варианты решения следующей задачи:
Есть некая программа (поделка  "Пети Иванова", кода нет, программиста за давностью времени нет) для внутреннего использования в организации, настройка которой осуществляется исключительно при текущем запуске (без использования реестра, файлов конфигурации и т.п.), но существует поддержка использования горячих клавиш (для использования с русской раскладкой).  Операционная система имеет настройку раскладки клавиатуры по умолчанию латинскую раскладку (обязательное условие). Возможно ли реализовать следующий скрипт 1) запустить программу (это и я могу); 2) сменить раскладку клавы для окна с открытой программой (это основной вопрос); 3) отправить комбинацию клавиш в активное окно.
Рассмотрю и опробую любые из предложенных вариантов.
Заранее благодарю за содействие.

2

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

http://scriptcoding.ru/2013/06/25/wscri … -sendkeys/

3

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

YMP
SendKeys я первым делом пробовал задействовать, но ведет себя он как то сомнительно....
Для примера возьмем код по ссылке представленной Вами:


Dim WshShell, my_arr(16), index
 
' Создаем ссылку на объект
Set WshShell = WScript.CreateObject("WScript.Shell")
 
'Определяем элементы массива
my_arr(0) = "Э"
my_arr(1) = "т"
my_arr(2) = "о"
my_arr(3) = "{ENTER 2}"
my_arr(4) = "п"
my_arr(5) = "р"
my_arr(6) = "о"
my_arr(7) = "с"
my_arr(8) = "т"
my_arr(9) = "о"
my_arr(10) = "й"
my_arr(11) = "{ENTER 2}"
my_arr(12) = "т"
my_arr(13) = "е"
my_arr(14) = "к"
my_arr(15) = "с"
my_arr(16) = "т"
 
' Запускаем программу блокнот
WshShell.Run "Notepad.exe", 1
 
WScript.Sleep 1000       

WshShell.SendKeys "(^+)"
 
' Используем цикл для перебора элементов массива
For each index in my_arr
     ' Имитируем нажатие клавиши

'msgbox index

     WshShell.SendKeys(index)
     ' Делаем задержку в 500 миллисекунд
     WScript.Sleep 500
Next
 

Этот пример отрабатывает при условии что настройка клавиатуры по умолчанию установлена в рус.
Но если раскладка системы установлена в Eng и я добавляю строку WshShell.SendKeys "(^+)" , т.е. сочетание клавиш CTRL+SHIFT (так у меня настроена смена раскладки), то в момент работы скрипта я вижу, что в языковой панели индикатор активного языка меняется на нужный мне (на рус), но при этом в блокнот поступает следующая последовательность символов: ] и 4 Enter (4 перехода на новую строку).

4

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

Да, фигня какая-то. Но тогда, видимо, остаётся на какие-то сторонние объекты полагаться.

5

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

Перед тем, как задать вопрос обратитесь к поиску по форуму по ключевым словам.
>>
Переключение раскладки клавиатура на английскую по умолчанию VBS

6

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

Flasher
Да этот пост я видел, создал тему так как приведенный в нем скрипт "сомнительно ведет себя"...
Если в нем заменить соответствующий текст этим:


' Настраиваем кнопки диалога сообщения: 
Msg = MsgBox("Нажмите Да для перехода в блокнот," & vbnewLine & _ 
"Нет - для перехода в WordPad" & vbnewLine & "Отмена - для других действий", 4099) 
If Msg = 6 Then 
	Run "notepad", RUS, HK
	WScript.Sleep 1000 
	WSH.SendKeys "т"
	WSH.SendKeys "е"
	WSH.SendKeys "с"
	WSH.SendKeys "т"
	WSH.SendKeys "%(пн)"

ElseIf Msg = 7 Then Run "%WinDir%\write.exe", ENG, HK
ElseIf Msg = 2 Then WScript.Echo "Другие действия!" 
End If

ни чего в блокнот не уходит... Ни текстовые клавиши, ни комбинация клавиш не "уходят" в блокнот.

PS: Как считаете перейти с обсуждение схожего вопроса в ту тему, либо остаться тут продолжать? Может быть уважаемые гуру скриптописания предложат в этой теме варианты на сторонних библиотеках типа AutoItX3, dynwrap и т.п.

7

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

Вот те здрасте.. В SendKeys отключили нелатиницу, потрясающе просто.
wshom.ocx вроде 9-го года. Если только в wscript.exe или vbscript.dll дело.

8

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

TAOSoft
Что ещё странно - даже Alt-коды не работают.
Что касается AutoItX3, то там всё просто:

With CreateObject("AutoItX3.Control")
  .Run "notepad.exe" : .WinWaitActive "[CLASS:Notepad]"
  .ControlCommand "[CLASS:Notepad]", "", "Edit1", "EditPaste", "текст text"
End With
+ AutoItX3.sxs.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="AutoItX3.sxs" version="3.2.12.1" />
  <file name="AutoItX3.dll">
    <typelib
        tlbid="{F8937E53-D444-4E71-9275-35B64210CC3B}"
        version="1.0"
        helpdir="" />
     <comClass
        clsid="{1A671297-FA74-4422-80FA-6C5D8CE4DE04}"
        progid="AutoItX3.Control" />
  </file>
  <comInterfaceExternalProxyStub
      name="ActiveX"
      iid="{3D54C6B8-D283-40E0-8FAB-C97F05947EE8}"
      proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
      tlbid="{F8937E53-D444-4E71-9275-35B64210CC3B}" />  
</assembly>

9

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

Flasher
Трюки с манифестами я уже не один год практикую на практике, достаточно успешно.
На автоите и т.п. я бы хотел реализацию моей задачи увидеть, а не типовые моменты использования.

10

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

TAOSoft
А сами как думаете, со слов Есть некая программа (поделка  "Пети Иванова" ... отправить комбинацию клавиш в активное окно можно предложить точную реализацию задачи, которая в полном представлении засела только в Вашей голове, и это при том, что далее от Вас последовал скрипт, олицетворяющий ввод некого текста в блокнот, как и в моём примере, только с набором лишних действий? Телепатией я, увы, не обладаю.

11

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

Flasher
Ну с блокнотом вариант наглядный, есть у всех и демонстративно показывает (хотя в ранних примерах ни че не показывает) получение им как русских символов, так и комбинацию через альт. Как раз это мне и нужно будет в итоге.

12

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

TAOSoft
Что значит "будет"? Вы мой скрипт запускали? Что в нём не так?

13

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

Flasher
Согласен то Ваш код в блокнот вставляет текст.
Можно ли как то в продолжение отправить через автоит в блокнот комбинацию Alt+П а следом Н (аналог .SendKeys "%(пн)")

14

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

TAOSoft
Почему аналог? Во втором случае Alt удерживается при нажатии "н", что реализуется так:

  .ControlSend "[CLASS:Notepad]", "", "Edit1", "{ALTTDOWN}пн{ALTUP}"

Если требуется вызвать диалог поиска, то проще эмулировать Ctrl+F:

  .ControlSend "[CLASS:Notepad]", "", "", "^f"

Либо в случае отсутствия хоткея непосредственно выбирать подпункт меню:

  .WinMenuSelectItem "[CLASS:Notepad]", "", "&Справка", "&О программе"

15

Re: VBS: Смена раскладки клавиатуры для активного окна приложения

Flasher
Спасибо большое за наводку, эти методы помогли мне выполнить нужные действия....


.ControlSend "[CLASS:Notepad]", "", "Edit1", "{ALTTDOWN}пн{ALTUP}"
.WinMenuSelectItem "[CLASS:Notepad]", "", "&Справка", "&О программе"