#flash #actionscript-3 #actionscript #actionscript-2
#flash #actionscript-3 #actionscript #actionscript-2
Вопрос:
У меня есть графический интерфейс, использующий Flex. У меня есть условие, например, мне нужно выполнить некоторые аргументы командной строки на локальном компьютере и получить результаты обратно или вывести обратно в область текстового поля. Как я могу нажать кнопку отправки, выполнить команду на локальном компьютере и вернуть выходные данные?
Command to execute example:
echo logfile.log | grep username
Code:
button1.onRelease = function ()
{
// in this computer, it will now run a command, please wait.
}
Моя ссылка из ответа:https://gist.github.com/993905
Комментарии:
1. button1.onRelease — это AS2, почему вы помечаете его как AS3?
2. Я хотел бы сделать то же самое для AS2, AS3 тоже.
3. Лора, пожалуйста, посмотри мой ответ. Это просто невозможно с AS2 или даже AS3 из браузера. Вам нужны собственные расширения, и flash Player специально избегает этого, чтобы избежать проблем с безопасностью. Вам нужен модифицированный проектор flash Player или, в лучшем случае, Adobe AIR 2.0 или более поздней версии, для которого потребуется использование Actionscript 3.
Ответ №1:
Вы не сможете сделать это с помощью actionscript 2, и вы не сможете сделать это с помощью actionscript 3 во flash web Player. Существуют определенные инструменты, которые вы можете использовать для создания проекторов с использованием actionscript 2 и 3, чтобы добавить такого рода расширенные возможности, но вы не можете просто сделать это из Интернета, поскольку, конечно, это было бы крайней угрозой безопасности.
Однако вы можете сделать это с Adobe AIR 2.0 или более поздней версии. Вы используете класс NativeProcess и определяете операционную систему, запускаете терминал или cmd.exe и затем вы можете запускать команды против него. Ниже приведен некоторый код из проекта, который я разработал для запуска команд в ОС с использованием AIR, как вы пытаетесь сделать:
private var os:String;
private var consoleExecutable:File;
private var consoleNativeProcess:NativeProcess;
private function usbMounted(e:StorageVolumeChangeEvent):void
{
//status.appendText('Device: ' e.storageVolume.name ' mounted to drive: ' e.storageVolume.drive 'n');
os = Capabilities.os.substr(0, 3).toLowerCase();
switch (os)
{
case "win":
//Windows OS
var rootDirs:Array = File.getRootDirectories();
var i:int = 0;
for (i; i < rootDirs.length; i) {
consoleExecutable = rootDirs[i] as File;
consoleExecutable = consoleExecutable.resolvePath("Windows");
if (consoleExecutable.exists == true) {
consoleExecutable = consoleExecutable.resolvePath("System32");
consoleExecutable = consoleExecutable.resolvePath("cmd.exe");
i = rootDirs.length;
}
}
break;
case "lin":
//Linux OS
break;
case "mac":
//Mac OS
break;
case "iph":
//Iphone OS
break;
}
var consoleNativeProcessStartupNfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
consoleNativeProcessStartupNfo.executable = consoleExecutable;
var startupArgs:Vector.<String> = new Vector.<String>();
startupArgs.push('/C fsutil fsinfo volumeinfo ' e.storageVolume.drive ':');
consoleNativeProcessStartupNfo.arguments = startupArgs;
consoleNativeProcess = new NativeProcess();
consoleNativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, consoleOutput);
consoleNativeProcess.start(consoleNativeProcessStartupNfo);
consoleNativeProcess.closeInput();
}
private function consoleOutput(e:ProgressEvent):void
{
var consoleOuput:String = consoleNativeProcess.standardOutput.readUTFBytes(consoleNativeProcess.standardOutput.bytesAvailable);
switch (os)
{
case "win":
//Windows OS
break;
case "lin":
//Linux OS
break;
case "mac":
//Mac OS
break;
case "iph":
//Iphone OS
break;
}
consoleNativeProcess.exit();
}
Таким образом, код должен быть довольно простым. Возможно, там не все, поскольку я только что скопировал часть кода, касающуюся запуска, вывода и завершения собственного процесса. Затем я удалил части кода, которые были конфиденциальными. По сути, вы просто получаете информацию об операционной системе, переходите к пути к исполняемому файлу, проверяете, существует ли он, и если да, запускаете его, запускаете команду против него и ждете вывода. Я ввел инструкцию switch для проверки ОС при обработке вывода, поскольку можно с уверенностью предположить, что то, что вы делаете дальше с выводом, также будет зависеть от ОС (или, по крайней мере, в моем случае так и было). Если вам нужна дополнительная помощь в понимании всего этого, я предлагаю поискать в Google руководство по Adobe AIR Native Process API или просто опубликовать еще несколько вопросов здесь. 🙂
Комментарии:
1. Также обратите внимание, что в качестве одного из примеров того, что этот код не совсем завершен, код начинается с того, что я получаю StorageVolumeChangeEvent, потому что в этом приложении я действую всякий раз, когда монтируется новый USB-ключ. Часть кода, которая прослушивает эти события, а также инструкции import отсутствуют.