2016-04-22 7 views
1

Macでは、ファイルをアプリケーションドックのアプリケーションアイコンにドロップすることができます。その情報を取得することは可能ですか?また、Windowsで同じことを行うことは可能ですか?MacとWindowsのアプリケーションアイコンにドロップされたファイルを取得する方法はありますか?

私はInvokeEventにまで読んできたが、私はそれはそれはそれのアイコンをドロップされたファイルを取得することも可能だと言う見ていません。また、その機能がWindows上でサポートされているかどうかについても言及していません。

ボーナスポイント:
Flash Builderのアプリケーションがインストールされていないので、これをテストする方法(デバッグを通じて起動します)。

+2

Windowsについてあなたが答える可能性のある人は、Macを持っていないとします。このドロップをするとどうなりますか? Windowsの** "Open With ..." **オプションに似ていますか? 「...ファイルを取得...」とはどういう意味ですか、「picture.jpg」ファイルをPhotoshopアイコンにドラッグした場合と同じように、AIRアプリケーションと何が関係しているのか、この例に入りたいのですか? –

+0

はい。それと同じように。 Windowsでのopenと同じで、Photoshopに画像をドラッグするのと同じです。私は画像へのファイル参照またはパスを取得したい。それは主にアプリのアイコンにドラッグアンドドロップすることです。 –

+2

あなたのアプリが開くことができるファイルタイプを登録し、次に呼び出すイベント –

答えて

0

私はMac上で動作しており、Windows上で動作するはずです。

異なるファイルタイプのためにあなたを登録すると、あなたがアイコンにファイルをドロップすることができ、アプリケーションが開き、あなたはそれのためのイベントリスナー(問題1解決)を追加した後、invokeイベントが送出されます。ファイルタイプを登録すると、MacとWindowsの両方で「Open with ...」を使用することもできます(問題2が解決されました)。

あなたの呼び出し機能は、あなたの実行/デバッグ起動引数(ボーナスポイント)内のファイルへのパスを追加することができます動作するかどうかをテストするためのFlash Builderまたは別のIDEを使用している場合。その周りに引用符を入れ、スペースで区切って追加の引数を追加します。

enter image description here

あなたは、アプリケーションにイベントリスナーを追加する必要がありますし、その後、あらゆる呼び出すが派遣されます。それまではキューに入れるだけです。

Macのアプリケーションアイコンに複数のファイルをドロップすると、複数の引数を持つ単一の起動イベントが発生します。 WindowsとLinuxでは、このイベントは単一の引数で複数回送出されます。各引数はファイルへのフルパスです。あなたは、通常のアプリケーションを開いて、どのファイルがアプリケーションにドロップしなかった場合でも、それが送出されたinvokeイベントをリッスン場合

。これは標準の呼び出しタイプであり、引数はありません。

以下の例は、invokeイベントをリッスンし、さまざまなケースを処理します。

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 

         invoke="windowedapplication1_invokeHandler(event)" 
         > 

    <fx:Script> 
     <![CDATA[ 

      protected function windowedapplication1_invokeHandler(event:InvokeEvent):void { 
       var invokeArguments:Array = event.arguments; 
       var filePath:String; 
       var stream:FileStream; 
       var file:File; 
       var testing:Boolean = false; 


       // application icon had a file dropped on it or an associated file was double clicked while app was open 
       if (event.reason == InvokeEventReason.STANDARD && invokeArguments.length) { 

        invokeWithFile(event.currentDirectory, invokeArguments); 
       } 


       // application opened normally 
       if (event.reason == InvokeEventReason.STANDARD && 
        (invokeArguments.length == 0 || testing)) { 

        if (testing) { 
         invokeArguments = ["/Users/me/Desktop/test.jpg"]; 
        } 

        invokeWithFile(event.currentDirectory, invokeArguments); 

        return; 
       } 

       // application opened at login 
       if (event.reason == InvokeEventReason.LOGIN) { 
        return; 
       } 

       // application opened from URL 
       if (event.reason == InvokeEventReason.OPEN_URL) { 
        return; 
       } 

       // application opened from notification such as iOS APN 
       if (event.reason == InvokeEventReason.NOTIFICATION) { 
        return; 
       } 
      } 

      public var invokedFile:File; 

      /** 
      * Invoked file. 
      * */ 
      public function invokeWithFile(currentDirectory:File, invokedArguments:Array):void { 
       var filePath:String = invokedArguments && invokedArguments.length ? invokedArguments[0] : null; 
       var fileData:String; 
       var fileStream:FileStream; 
       var file:File; 

       if (filePath) { 
        try { 
         file = new File(filePath); 
        } 
        catch (errorEvent:*) { 
         trace("Error: " + errorEvent.toString()); 
         return; 
        } 

        if (file && 
         file.exists && 
         file.isDirectory==false && 
         file.extension && 
         file.extension.toLowerCase()=="mxml") { 
         fileStream = new FileStream(); 

         try { 
          fileStream.open(file, FileMode.READ); 

          if (fileStream.bytesAvailable) { 
           fileData = fileStream.readUTFBytes(fileStream.bytesAvailable); 
          } 
         } 
         catch (error:*) { 

         } 
        } 
       } 
      } 
     ]]> 
    </fx:Script> 

</s:WindowedApplication> 

ここにアプリケーション記述ファイルがあります。ファイルタイプは厳密です。私はノートをインライン含めました:

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<application xmlns="http://ns.adobe.com/air/application/20.0"> 

    <fileTypes> 

     <fileType> 
      <!-- name cannot contain a space --> 
      <name>MXML.File</name> 
      <!-- extension cannot be * --> 
      <extension>mxml</extension> 
      <description>MXML file</description> 
      <!-- content type is required --> 
      <contentType>text/plain</contentType> 
     </fileType> 
     <fileType> 
      <name>Photoshop.Image</name> 
      <extension>psd</extension> 
      <description>Adobe Photoshop Image</description> 
      <contentType>application/octet-stream</contentType> 
     </fileType> 
     <fileType> 
      <name>JPEG.Image</name> 
      <extension>jpg</extension> 
      <description>JPEG Image</description> 
      <contentType>image/jpeg</contentType> 
     </fileType> 
     <fileType> 
      <name>JPEG.Image</name> 
      <extension>jpeg</extension> 
      <description>JPEG Image</description> 
      <contentType>image/jpeg</contentType> 
     </fileType> 
     <fileType> 
      <name>PNG.Image</name> 
      <extension>png</extension> 
      <description>PNG Image</description> 
      <contentType>image/png</contentType> 
     </fileType> 
     <fileType> 
      <name>GIF.Image</name> 
      <extension>gif</extension> 
      <description>GIF Image</description> 
      <contentType>image/gif</contentType> 
     </fileType> 

    </fileTypes> 

</application> 

ファイルタイプのエラー:

エラー104:application.fileTypes.fileType.contentTypeが必要です。 解決方法:コンテンツタイプを含める必要があります。オンラインで言及された他の場所はオプションでしたが、今必要になるかもしれません。 ContentType is required error

エラー104:application.fileTypes.fileType.extensionが必要です。 解決方法:拡張機能を含める必要があります。
enter image description here

エラー105:application.fileTypes.fileType.extensionに無効な値が含まれています。 解決方法:内線を空にすることはできません。 enter image description here

エラー105:application.fileTypes.fileType.nameに無効な値が含まれています。 解決方法:名前にはスペース文字を使用できません。 enter image description here

関連する問題