MathJax

HTML

Командная строка с автоматическим английским


Здравствуйте! Пользуясь командной строкой, я подзадолбался переключать каждый раз при ее запуске язык клавы на английский, подзадумался, полез в Гугл. Там копал, копал, так себе накопал, наткнулся на тему, где один голландец, что ли, задает похожий вопрос. Ему говорят, что что-то надо удалить (если у вас вообще есть этот файл) в папке System32 и тогда командная строка будет запускаться с английским языком ввода - Бинго!!! Но... оборотной стороной ентого всего дела является то, что и все сообщения самой командной строки начинают выводится тоже на английском - ваще на камильфо. Что же делать? Тогда я сообразил, что, с одной стороны, язык ввода можно переключать без мышки, одной клавой. С другой стороны, я знал, что существует язык программирования, у которого в файлы для его интерпретатора (выполнителя этих файлов, написанных для этого выполнителя) можно написать команды, исполнение которых будет равносильно нажатию клавиш на клаве - класс! Язык этот - JScript. Не буду вас загружать подробностями, тем более, что я сам еще так себе в этом языке. Я так понял, что этот язык является частью другого языка и вот для этого более общего языка, какие-то системы младше винды7 не имеют его интерпретатора (не понимают его), но его на них можно установить, тырым-пырым, тудым-сюдым. Но на Семерку, слава Богу, ничего доустанавливать не надо, там все для этого есть. Короче, открываем Блокнот, вставляем туда следующий код:

cd /d %0\..
start 2.bat


это будет 1.bat. Файл 2.bat будет таким:

chcp 1251
cd C:\Users\ИВАН
cls


В этих файлах еще нет команды для переключения на английский. Эта команда, правда, не в явном виде, содержится в файле с расширением .js следующего содержания:

WshShell=WScript.CreateObject("WScript.Shell")
WshShell.Run("1.bat",0);
WScript.Sleep(500)
WshShell.AppActivate("cmd");
WshShell.SendKeys("%+");


Его изготавливают также, как и батник по приведенной мной выше ссылке, только в имени после последней точки нужно написать js вместо bat. Лично я написал cmd.exe.js. Файлы 1.bat и 2.bat точно должны находиться в папке, которая добавлена в PATH. Далее наводим мышкой на файл cmd.exe.js, нажимаем левую кнопку мышки и, не отпуская ее, тащим мышку на меню Старт, когда оно откроется, закрепляем в нем наш файл cmd.exe.js в удобной для вас позиции:

Как это все работает? Когда вы в меню старт нажимаете левой кнопкой мышки на cmd.exe.js, вы заставляете выполняться код, содержащийся в нем. Что написано в этом коде? Запустить файл 1.bat и ничего не делать 0,5с. Пока файл cmd.exe.js ничего не делает, действует файл 1.bat. А он что делает? Он запускает файл 2.bat и закрывается, при этом, т.к. никаких действий в окне этого батника не нужно производить, то я его сделал выполняющемся в фоновом режиме, черное окно, обычно появляющееся при выполнении файлов с кодами, при таком способе запуска в данном случае батника не появляется, для чего я и поставил в коде файла cmd.exe.js после "1.bat" через запятую 0. Файл же 2.bat, в отличии от 1.bat, после открытия сам не закрывается. Именно поэтому мне потребовалось использовать для решения озвученной в данном посте проблемы 2 файла .bat (2 батника). Файл же 2.bat сначала переключает кодировку окна, в котором выполняется, на windows-1251. Это нужно, потому что следующая команда - переход в папку C:\Users\ИВАН - папку, в которой запускается командная строка при открытии ее традиционным образом, не файлом cmd.exe.js - содержит кириллические буквы и очищает окно выполнения файла 2.bat от отображения уже выполненных команд и отчетах об этих выполнениях. При желании перед cls в 2.bat можно добавить команду

chcp 866

тогда после очищения окно выполнения файла 2.bat кодировка этого окна станет такой же, как при запуске командной строки обычным способом, но я у себя не стал этого делать, т.к. при стандартной кодировке командной строки отсутствует возможность использования кириллических букв в путях. Далее после выполнения этих команд файлом 2.bat (0,5 секунд на это все хватает) в дело опять вступает файл cmd.exe.js. Он активизирует открытое последним (проверял экспериментом) окно командной строки, созданное файлом 2.bat и имитирует в нем нажатие сочетания клавиш Alt+Shift. В коде это место

.................................
WshShell.SendKeys("%+");


Вот эта часть кода и переключает раскладку клавиатуры. Она означает, что компу нужно сымитировать нажатие сочетания клавиш Alt+Shift. Фактически, если руками попробовать нажимать сочетание клавиш Alt+Shift, то переключение языка ввода на клаве не произойдет. Произойдет же оно только при вводе сочетания клавиш Alt+Shift+Alt+Shift+Alt+Shift перед последнем нажатием Shift, а это последнее нажатие Shift нужно для того, чтобы отжать находящуюся к тому времени нажатой клавишу Shift (у меня включено Залипание клавиш). Видимо, из-за включенного залипания клавиш мне и нужно нажимать руками такое длинное сочетание клавиш. Комп же, получается, выполняет это же нажатием всего лишь сочетания Alt+Shift. Вот в этом месте была заморочка. С одной стороны, я первоначально хотел использовать изначально имеющееся в винде7 сочетание клавиш для переключения клавы на английский язык - Ctrl+0. Но... Всегда есть "но". Выяснилось, что при указании в файлах .js клавиш, нажатие которых нужно сымитировать, символы с этих клавиш должны вводиться в файлы .js не при английской раскладки клавы, а при раскладке клавы такой же, как и язык системы, т.е., если бы язык моей системы был бы Русский, то, т.к. при вводе, например, в Блокнот, или Ворд, при Русской раскладке клавиатуры 0 не с цифровой панели, 0 же и вводится, то я бы в .js вместо строки переключения клавы

.................................
WshShell.SendKeys("%+");


мог бы написать строку

.................................
WshShell.SendKeys("^0");


, как раз и имитирующую нажатие клавиш Ctrl+0. Но по причине, указанной мной на странице, ссылка на которую приведена в этом повествовании выше, я предпочитаю использовать Казахскую раскладку клавы. А на клаве же при этой раскладке клавы на одной кнопке с нулем из нецифрового блока стоит казахская буква "қ" и эта буква вводится при нажатии на нее в Блокноте или Ворде при казахской раскладке клавиатуры. Так что для того, чтобы записать в файле .js имитацию нажатия сочетания клавиш Ctrl+қ, я должен был бы включить в него строку

.................................
WshShell.SendKeys("^қ");


Но при попытке это сделать при сохранении файла .js Блокнот выдаваk ошибку, что, типа, "Этот файл содержит юникод, который будет потерян при сохранении в ANSI". И, действительно, при сохранении и последующем переоткрытии файла в Блокноте на месте этой буквы стоит вопросительный знак. Именно поэтому мне пришлось использовать не очень надежное сочетание клавиш Alt+Shift. Да, еще. Чтобы это все работало, нужно добраться до вкладки
Переключение клавиатуры, как описано здесь, левой кнопкой мыши щелкнуть по Переключить язык ввода, затем нажимаем кнопку
Сменить сочетание клавиш, в открывшемся диалоговом окне должно быть так:



Я специально сфотографировал только левую часть того окна, подчеркнув, что в данном случае важно только это. Хотя я не понимаю, почему за это не отвечает правый переключатель того же окна Смена раскладки клавиатуры, казалось бы, этот переключатель тоже должен иметь отношение к делу, хотя, с другой стороны, чем-то же эти переключатели должны друг от друга отличаться!
P.S. Теперь еще вот что. Сегодня попробовал, получилось. Рассказываю. Если закрепить в меню Пуск созданный файл cmd.exe.js, то по внешнему виду это будет отличаться от закрепленной в панели задач Командной строки. Ща сделаем, что будет один в один. Для этого нужно создать ярлык файла cmd.exe.js, переименовать его в Командная строка. Прям так и написав, без "... - ярлык". Далее щелкаем по этому ярлыку правой кнопкой мышки, в открывшемся контекстном меню щелкаем левой кнопкой мышки пункт Свойства, там переходим на вкладку Ярлык, нажимаем кнопку Сменить значок, нажимаем кнопку Обзор, в открывшемся окне переходим в папку C:\Windows\System32, ищем там файл cmd, щелкаем по нему левой кнопкой мышки, нажимаем кнопку Открыть, в следующих окнах нужно будет 2 раза нажать кнопки $\ok$, там захочешь - не перепутаешь. Все, после этого наш ярлык начинает выглядеть, как командная строка. И теперь его и закрепляем в меню Пуск:
Сверху ярлык на изготовленной мной файл .js, а снизу для сравнения стандартная Майкрософтовская командная строка.

2 комментария:

Архив блога