2016-01-25 3 views
1

У меня есть <s:List />, который содержит кучу files. При щелчке правой кнопкой мыши я открываю меню в позиции (x, y) мыши, которая позволяет пользователю «Открыть местоположение файла». Моя борьба открывает местоположение файла и выбирая (не открывая) файл так же, как проводник Окна. Самый близкий я пришел к открытию родительской папки и с помощью file.openWithDefaultApplication();, который открывает папку, в которой находится файл, не показывая пользователю фактический файл.открыть файл с as3

MXML

 <s:List 
      id="fileDownList" 
      height="100%" 
      width="100%" 
      dataProvider="{files}" 
      labelField="name" 
      allowMultipleSelection="false" 
      rightClick="rightMouseDown(event)" 
      itemRollOver="currentItem = event.itemRenderer.data" 
      /> 

AS3

private function rightMouseDown(event:MouseEvent):void { 
     createMenu(currentItem, event.stageX, event.stageY); 
    } 

     private function createMenu(item:Object, xPos:int, yPos:int):void { 
     if (menu != null) { 
      menu.hide(); 
     } 
     var menuItems:Array = []; 

     menuItems.push({label:"Open File Location"), 
      func: function run():void{ 
       //runs on doMenuAction listener, need to open location here 

      } 

     }); 

     if (menuItems.length > 0) { 
      menu = Menu.createMenu(tree, menuItems); 
      //noinspection JSValidateTypes 
      menu.addEventListener(MenuEvent.ITEM_CLICK, doMenuAction); 
     } 

     if (menu != null) { 
      menu.show(xPos, yPos); 
     } 

    } 

Пример

enter image description here enter image description here

+0

мутноватый, что вы просите. Также - на основе браузера? ВОЗДУХ? –

+0

@ Слайпер какая часть неясна, поэтому я могу уточнить? Это настольное приложение AIR. –

+1

@Sleeper, вы когда-нибудь использовали поиск файлов Windows? когда он дает вам список имен файлов, вы можете щелкнуть его правой кнопкой мыши и выбрать «открыть местоположение файла», открывающее новое окно проводника, и автоматически прокручивается до указанного файла, где он автоматически подсвечивается/выбирается для вас ... –

ответ

1

То, что я в конечном итоге делает создавал CMD-файл (просто переименованный .bat-файл), который открывает каталог с аргументом /select в файле.

AS3

private function run():void{ 
         var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
         var file:File = File.applicationDirectory.resolvePath("C:\\Users\\Me\\Desktop\\launcher.cmd"); 
         nativeProcessStartupInfo.executable = file; 

         var processArgs:Vector.<String> = new Vector.<String>(); 
         processArgs[0] = item.url; 
         nativeProcessStartupInfo.arguments = processArgs; 

         process = new NativeProcess(); 
         process.start(nativeProcessStartupInfo); 

        } 

launcher.cmd

@ECHO OFF 
SET /a LOCATION=%1 
explorer /select, %1 
2

Дайте ему попробовать ... Оказывается возможно с использованием NativeProcess и некоторых параметров Explorer.exe.

Heres является базовым примером только для AS3. Пожалуйста, проверьте, а затем применить логику в коде:

//# String holds required file path 
//# example ::: myfileURL = "C:\\myFolder\\mySubFolder\\myImage.jpg"; 
public var myfileURL : String = ""; 

myfileURL = "C:\\VC1\\Tests\\CoolSong.mp3"; //update this before running function 
openWindows_FileSelected(); //run the function 

private function openWindows_FileSelected():void 
{ 
    var explorer:File = new File("C:\\Windows\\explorer.exe"); 

    if (explorer.exists) 
    { 
     var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
     nativeProcessStartupInfo.executable = explorer; 

     var args:Vector.<String> = new Vector.<String>(); 

     args.push("/select,"); 
     args.push(myfileURL); //file to auto-highlight 

     nativeProcessStartupInfo.arguments = args; 
     process = new NativeProcess(); 
     process.start(nativeProcessStartupInfo); 
    } 

} 


PS:

Единственные подводных камней я могу думать ... Так как вы используете File вы должны получить строка пути через .nativePath командный файл, который дает строку как:
"C:/myFolder/mySubFolder/myImage.jpg"

но для приведенной выше коды для работы вы должны сделать замену (попробовать метод String, Split/Join) и он вот oking как:
"C:\\myFolder\\mySubFolder\\myImage.jpg".
Если вы не заменить все одного косую черту с двойными обратными косыми чертами, то Explorer.exe обыкновение, как это, и вы всегда будете получать сообщение об ошибке ...

+1

Файлы имеют свойство 'url', которое вы можете использовать вместо разделения и соединения. –

+0

Ах !! Должен был подумать об этом. Еще новичок в AIR-коде. Ваш вопрос - моя третья попытка. Только когда-либо нужно было перекомпилировать код AS3 для Android. –

Смежные вопросы