Есть ли способ создать файл ярлыка с Adobe Air? - PullRequest
2 голосов
/ 01 декабря 2011

Добрый день,
Я хотел бы создать приложение, которое может создавать папки и ярлыки для папок в файловой системе. Пользователь нажимает кнопку и помещает на рабочий стол папку с ярлыками для файлов, таких как // server / folder1 / folder2. Можно ли создать ярлык на рабочем столе с кодом в Adobe Air? Как бы Вы это сделали? Как вы создаете папку? Я продолжаю думать, что это должно быть легко, но я продолжаю скучать по нему.
Спасибо за вашу помощь, извините за беспокойство,
Джастин

Ответы [ 4 ]

3 голосов
/ 02 декабря 2011

Если ваш профиль развертывания - Extended Desktop , вы можете использовать NativeProcess и некоторые простые сценарии, которые можно упаковать с приложением. Этот подход повлечет за собой обработку функциональности для каждой ОС, что потребует определенной работы и тщательного тестирования Тем не менее, я хотел бы хотя бы поделиться сценарием, который, как я убедился, работает. Ниже приведен тестовый пример, который я бросил вместе:

Контрольный пример: Windows 7

Несмотря на то, что в документации Adobe говорится, что он предотвращает выполнение файлов .bat , очевидно, он не мешает запускать сервер сценариев Windows: wscript.exe . Это означает, что вы можете выполнять любые файлы JScript или VBScript. И это то, что вы использовали бы, чтобы написать команду для создания ярлыка в Windows (поскольку в противном случае Windows не имеет команды командной строки для создания ярлыков).

Вот простой скрипт для создания ярлыка команды, который я нашел на giannistsakiris.com (преобразован в JScript):

// File: mkshortcut.js

var WshShell = new ActiveXObject("WScript.Shell");
var oShellLink = WshShell.CreateShortcut(WScript.Arguments.Named("shortcut") + ".lnk");
oShellLink.TargetPath = WScript.Arguments.Named("target");
oShellLink.WindowStyle = 1;
oShellLink.Save();

Если вы упакуете это в своем приложении в папку с именем utils , вы можете написать функцию для создания ярлыка, например:

public function createShortcut(target:File, shortcut:File):void {
  if (NativeProcess.isSupported) { // Note: this is only true under extendedDesktop profile
    var shortcutInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();

    // Location of the Windows Scripting Host executable
    shortcutInfo.executable = new File("C:/Windows/System32/wscript.exe");

    // Argument 1: script to execute
    shortcutInfo.arguments.push( File.applicationDirectory.resolvePath("utils/mkshortcut.js").nativePath);

    // Argument 2: target
    shortcutInfo.arguments.push("/target:" + target.nativePath);

    // Argument 3: shortcut
    shortcutInfo.arguments.push("/shortcut:" + shortcut.nativePath);

    var mkShortcutProcess = new NativeProcess();
    mkShortcutProcess.start(shortcutInfo);

  }
}

Если кто-то хочет создать ярлык для каталога хранилища приложений на рабочем столе, будет достаточно следующего:

var targetLocation:File = File.applicationStorageDirectory;
var shortcutLocation:File = File.desktopDirectory.resolvePath("Shortcut to My AIR App Storage");

createShortcut(targetLocation, shortcutLocation);

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

1 голос
/ 01 декабря 2011

Насколько я знаю, класс File не позволяет создавать символические ссылки.Но вы можете создавать каталоги с помощью createDirectory(): http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filesystem/File.html#createDirectory%28%29

Проверьте, может ли это быть полезным: http://www.mikechambers.com/blog/2008/01/17/commandproxy-net-air-integration-proof-of-concept/

0 голосов
/ 30 июля 2014

Возможно заставить Adobe Air создавать символические ссылки, другие полезные вещи на Mac.Вот как я это сделал:

Вам понадобится AIRAliases.js - редакция: 2.5

В application.xml добавьте:

<!-- Enables NativeProcess -->
<supportedProfiles>extendedDesktop desktop</supportedProfiles>

В приложении Air JavaScript:

//    A familiar console logger 
var console = {
    'log' : function(msg){air.Introspector.Console.log(msg)}
};

if (air.NativeProcess.isSupported) {
    var cmdFile = air.File.documentsDirectory.resolvePath("/bin/ln");

    if (cmdFile.exists) {
        var nativeProcessStartupInfo = new air.NativeProcessStartupInfo();
        var processArgs = new air.Vector["<String>"]();

        nativeProcessStartupInfo.executable = cmdFile;
        processArgs.push("-s");
        processArgs.push("< source file path >");
        processArgs.push("< link file path >");
        nativeProcessStartupInfo.arguments = processArgs;
        nativeProcess = new air.NativeProcess();
        nativeProcess.addEventListener(air.NativeProcessExitEvent.EXIT, onProcessExit);
        nativeProcess.addEventListener(air.ProgressEvent.STANDARD_OUTPUT_DATA, onProcessOutput);
        nativeProcess.addEventListener(air.ProgressEvent.STANDARD_ERROR_DATA, onProcessError);
        nativeProcess.start(nativeProcessStartupInfo);
    } else {
        console.log("Can't find cmdFile");
    }
} else {
    console.log("Not Supported");
}

function onProcessExit(event) {
    var result = event.exitCode;
    console.log("Exit Code: "+result);
};

function onProcessOutput() {
    console.log("Output: "+nativeProcess.standardOutput.readUTFBytes(nativeProcess.standardOutput.bytesAvailable));
};

function onProcessError() {
    console.log("Error: "+nativeProcess.standardError.readUTFBytes(nativeProcess.standardError.bytesAvailable));
};

Изменяя синтаксис команды и параметров, передаваемых в NativeProcess, вы также сможете получить реальные ярлыки в Windows.

0 голосов
/ 09 ноября 2012

Воздух не позволяет создавать ярлыки изначально.Вот обходной путь, который работает с Windows [может работать на Mac, но у меня нет машины для тестирования].

Используя Air, создайте файл, который содержит следующий простой текст

[InternetShortcut]
URL=C:\path-to-folder-or-file

Замените path-to-folder-or-file именем вашей папки / файла

Сохраните файл как test.url

Windows распознает этот файл как ярлык.

...