0

アプリケーションを起動し、applescript を使用してファイルを開こうとしています。Apple Script Editorからできました。これは私が書いたスクリプトです:

set AppPath to "<My App Path.app>"
tell application AppPath
    if it is running then
        activate
    else
        launch
    end if
    tell application AppPath to open POSIX file "<My File Path>"
end tell

アプリケーションがバックグラウンドで実行されている場合、起動だけではフォアグラウンド (スクリプト エディターの上) に移動できませんでした。また、アプリケーションが実行されていない場合、アクティブ化はスプラッシュ スクリーンを表示できませんでした。そのため、ボットの起動とアクティブ化を使用しました。

スクリプトは正常に動作しています。しかし、私の C++ プログラムにはスクリプトが必要です。アプリのパスとファイルのパスは実行時に決定されます。だから私はNSAppleScriptとしてスクリプトを生成し、スクリプトを実行していました。生成された NSApplescript は次のようになります。

do shell script "osascript -e 'set AppPath to \"<My App Path.app>\"' 
-e 'tell application AppPath' -e 'if it is running then' -e 'activate' 
-e 'else' -e 'launch' -e 'endif' 
-e 'tell application AppPath to open POSIX file \"<My File Path>\"'"

上記のコードはすべて 1 行にまとめられていますが、読みやすくするために分割しています。というエラーが表示されますvariable e is not defined。これは実行されていません。

このスクリプトを生成するために使用するコードは次のとおりです。

NSMutableString *script = [NSMutableString stringWithCapacity:512];
[script appendString:@"do shell script \"osascript "];
[script appendString:@"-e 'set AppPath to \\\""];
[script appendString:pathToApp];
[script appendString:@"\\\"'"];
[script appendString:@" -e 'tell application AppPath'"];
[script appendString:@" -e 'if it is running then'"];
[script appendString:@" -e 'activate'"];
[script appendString:@" -e 'else'"];
[script appendString:@" -e 'launch'"];
[script appendString:@" -e 'end if'"];
[script appendString:@" -e 'tell application AppPath to open POSIX file \\\""];
[script appendString:pathToFile];
[script appendString:@"\\\"'"];
[script appendString:@"\"\r"];

user309603 が提案したように、-e の前にスペースを追加しました。今、私は新しいエラーを受け取ります:

エラー "266:266: 構文エラー: 行末などが予想されますが、スクリプトの終わりが見つかりました。(-2741)" 番号 1

4

2 に答える 2

0

コード生成を使用しないでください。ただしないでください。コード生成が必要だと思うなら、それは間違っています。osascript と NSAppleScript の両方を使用すると、パラメータを既存の AppleScript に渡すことができます。

ファイルを開くような単純なことであれば、AppleScript はまったく必要ありません。NSWorkspaceまたはLaunchServicesを使用します。

于 2014-04-29T10:30:06.560 に答える