1

openWithDefaultApplicationファイルクラスのメソッドを使用して、デフォルトのアプリケーションでファイルを開くことができることを知っています。ただし、このメソッドを使用して関連付けられていないファイル (おそらく独自の拡張機能またはカスタム拡張機能) を開こうとすると、ランタイム エラーがスローされます。

Windowsが「Open with ...」ダイアログで行うように、特定のアプリケーションでファイルを開くようにユーザーに促す方法はありますか?

フレームワークの AIR を使用しない場合は、NativeProcessAPI 経由ですか?


解決策- 以下の Pixel Elephants の回答を基礎として使用します。

var processInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();                      
    processInfo.workingDirectory = file.parent;             
    processInfo.executable = new File("C:\\WINDOWS\\system32\\cmd.exe");

    var args:Vector.<String> = new Vector.<String>();       
    args.push("/c");
    args.push(file.name);

    processInfo.arguments = args;

    var process:NativeProcess = new NativeProcess();

    try
    {
        process.start(processInfo);
    }
    catch(e:Error)
    {
        //give up - open the folder
        file.parent.openWithDefaultApplication();
    }
4

1 に答える 1

0

関連付けられたファイル タイプを持たないアプリケーションを起動しようとすると、Windows の [Open with...] ダイアログが表示されます。NativeProcess.start() を使用してアプリケーションを起動すると、Windows が正しいプログラムでアプリケーションを開くか、ファイル タイプが関連付けられていない場合は選択画面を表示します。

あるいは、何をしようとしているのかによっては、ファイルの種類を AIR アプリケーションに関連付けることに関心があるかもしれません。たとえば、PNG ファイルを AIR アプリに関連付けて、デフォルトで AIR アプリで開くようにすることができます (たとえば、PNG ファイルをダブルクリックすると、開いた PNG ファイルを指定する INVOKE イベントでアプリが起動します)。詳しくは、 http://livedocs.adobe.com/flex/3/html/help.html?content=File_formats_1.htmlの「ファイル タイプの関連付けの宣言」を参照してください。

もちろん、AIR アプリには開こうとしているファイルを開く機能がなく、別のプログラムでそれを処理したい場合があります。その場合は、オペレーティング システムに起動を任せる最初の方法を使用できます。正しいプログラムを含むアプリケーション。

編集 :

Native Processが実際に何をするのか混乱しました。NativeProcess はファイルではなく実行可能ファイルを起動するため、上記の方法は機能しません。

NativeProcess で直接ファイルを開こうとする代わりに、ファイルを開くプログラムを開いて、ファイルを引数として渡してみてください。たとえば、PNG ファイルを特別な画像プログラムで開きたい場合は、次のようにします。

var imageEditorProgram:File = new File("C:/Path/To/Program.exe");

var args:Vector.<String> = new Vector.<String>();
args.push("C:/Path/To/Image.png");

var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
nativeProcessStartupInfo.executable = imageEditorProgram;
nativeProcessStartupInfo.arguments = args;

var nativeProcess:NativeProcess = new NativeProcess();
nativeProcess.start(nativeProcessStartupInfo);

これにより、画像ファイルが渡された画像編集プログラムが開きます。

ただし、この方法の欠点は、ファイルを開くプログラムをオペレーティング システムに決定させることができないことです。ファイル参照ダイアログを開き、ユーザーがファイルを開くプログラムを選択できるようにする必要があります (オペレーティング システムが行う方法と同様)。したがって、うまくいけば、次のことがあなたが望むことをするでしょう:

var file:File = File.userDirectory;
file.addEventListener(Event.SELECT, selectHandler);
file.browse();

private function selectHandler(e:Event):void{
    file.removeEventListener(Event.SELECT, selectHandler);
    var filePath:String= file.nativePath;
    var imageEditorProgram:File = new File(filePath);

    var args:Vector.<String> = new Vector.<String>();
    args.push("C:/Path/To/Image.png");

    var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
    nativeProcessStartupInfo.executable = imageEditorProgram;
    nativeProcessStartupInfo.arguments = args;

    var nativeProcess:NativeProcess = new NativeProcess();
    nativeProcess.start(nativeProcessStartupInfo);

}

上記のコードはテストしていませんが、ファイル参照ダイアログを開いて、ユーザーがファイルを開くプログラムを選択できるようにする必要があります (おそらく、ユーザーが .exe のみを選択するように制限するには FileFilter を追加する必要があります)。そのプログラムは NativeProcess を使用しています。

使いやすさのために、ファイルタイプのユーザー設定を保存することを検討する必要があります (そのため、PNG を開くたびにファイルブラウザーを強制的に通過させるのではなく、AwesomeImageEditor.exe で PNG を開くことを好むことを覚えておいてください)。

于 2012-08-08T14:06:23.727 に答える