Можно ли отправить Alt + Space в командную строку с помощью метода WSH javascript sendKeys?

Следующий код не работает в командной строке. Отправляет только " ". Почему? Я использую виндовс7.

[js]
var shellApp = new ActiveXObject("Wscript.Shell");
shellApp.appActivate("C:\\Windows\\system32\\cmd.exe"); //Other apps seem to work.
WScript.Sleep(1000);
shellApp.sendKeys("%( )");

Я хочу вставить строку. Для этого мне нужно нажать Alt+Пробел в командной строке. Решение WSH является лучшим. Я не могу установить и использовать сторонние программы, потому что это не разрешено в моей среде.

Спасибо.


person Kei Minagawa    schedule 03.12.2013    source источник
comment
Включите режим быстрого редактирования для CMD, и вы сможете вставлять текст одним щелчком правой кнопки мыши (см. здесь). Не возитесь с SendKeys.   -  person Ansgar Wiechers    schedule 03.12.2013
comment
У меня была та же проблема, но я нашел обходной путь, вызвав powershell. Подробности см. в этом ответе.   -  person rojo    schedule 25.11.2014


Ответы (2)


Вы хотите вставить строку или вы хотите вставить содержимое буфера обмена? Чтобы вставить буфер обмена, вы можете использовать это (он написан на VBScript, но вы можете перестроить его на JavaScript):

dim shellApp
Set shellApp = Wscript.CreateObject("Wscript.Shell")
shellApp.appActivate "C:\Windows\system32\cmd.exe"
WScript.Sleep 1000

Dim objHTML
Set objHTML = CreateObject("htmlfile")
shellApp.sendKeys objHTML.ParentWindow.ClipboardData.GetData("Text")

Недостаток: вам нужно экранировать любой специальный символ.

person AutomatedChaos    schedule 03.12.2013
comment
Я знаю, что Вы имеете ввиду. Если все символы строки состоят из символов ascii, это работает хорошо. Но что, если строка содержит многобайтовый символ. На самом деле я хочу отправить многобайтовый символ в командную строку. Вот почему мне нужно эмулировать Alt+Space. Я могу вставить многобайтовую строку с помощью Alt + Space и нажать e и p. Я просто хочу подражать этому. - person Kei Minagawa; 03.12.2013

Я, наконец, решил это сам. Вот мой ответ. Для запуска этого кода вам необходимо приложение Excel. Спасибо всем.

[js]
//Be careful. It seems completely emulate key press.
//You need Execel app to run this code.
var shellApp = new ActiveXObject("Wscript.Shell");
var ex = WScript.CreateObject("Excel.Application");
shellApp.appActivate("C:\\Windows\\system32\\cmd.exe")
ex.ExecuteExcel4Macro("CALL(\"user32\",\"keybd_event\",\"JJJJJ\",164,56,1,0)");
ex.ExecuteExcel4Macro("CALL(\"user32\",\"keybd_event\",\"JJJJJ\",32,57,1,0)");
ex.ExecuteExcel4Macro("CALL(\"user32\",\"keybd_event\",\"JJJJJ\",32,57,3,0)");
ex.ExecuteExcel4Macro("CALL(\"user32\",\"keybd_event\",\"JJJJJ\",164,56,3,0)");
shellApp.sendKeys("ep");//Pasting clipboard text

Ссылка: Как отправить Alt+space в окно консоли?

person Kei Minagawa    schedule 04.12.2013