「MonoMac/AppleScriptを実行する」の版間の差分

提供:MonoBook
ページの作成:「==実装例1== MonoMacにはAppleScriptコンパイルしたり実行したりするNSAppleScriptクラスが存在しないようだ。応急処置的で...」
 
編集の要約なし
1行目: 1行目:
[[MonoMac]]には[[AppleScript]]を[[コンパイル]]したり実行したりするNSAppleScriptクラスが存在しないようだ。
そこで応急処置的な解決策を模索してみる。
なお、[[Xamarin.Mac]]にはFoundation名前空間にNSAppleScriptクラスが用意されている。
可能であればそちらを使う方が望ましいと思われるが、両対応を考えるとこちらの方が有効かもしれない。
詳細は「[[Xamarin.Mac/AppleScriptを実行する]]」を参照。
==実装例1==
==実装例1==
[[MonoMac]]には[[AppleScript]]を[[コンパイル]]したり実行したりするNSAppleScriptクラスが存在しないようだ。応急処置的ではあるが[[コマンドライン]]から[[AppleScript]]を実行するosascriptコマンドを使えば一応は問題ないようだ。
[[コマンドライン]]から[[AppleScript]]を実行するosascriptコマンドを使えば一応は問題ないようだ。
 
定型文的に決まったAppleScriptであればBundle Resourceにテキストファイルとして用意しておいて、osascriptコマンドにファイル引数を渡すのもありかもしれない。
<source lang="csharp">
<source lang="csharp">
         public override void AwakeFromNib()
         public override void AwakeFromNib()
34行目: 41行目:
         }
         }
</source>
</source>
定型文的に決まったAppleScriptであればBundle Resourceにテキストファイルとして用意しておいて、osascriptコマンドにファイル引数を渡すのもありかもしれない。


==関連項目==
==関連項目==
*[[Xamarin.Mac/AppleScriptを実行する]]


==参考文献==
==参考文献==

2015年7月2日 (木) 05:12時点における版

MonoMacにはAppleScriptコンパイルしたり実行したりするNSAppleScriptクラスが存在しないようだ。 そこで応急処置的な解決策を模索してみる。

なお、Xamarin.MacにはFoundation名前空間にNSAppleScriptクラスが用意されている。 可能であればそちらを使う方が望ましいと思われるが、両対応を考えるとこちらの方が有効かもしれない。 詳細は「Xamarin.Mac/AppleScriptを実行する」を参照。

実装例1

コマンドラインからAppleScriptを実行するosascriptコマンドを使えば一応は問題ないようだ。 定型文的に決まったAppleScriptであればBundle Resourceにテキストファイルとして用意しておいて、osascriptコマンドにファイル引数を渡すのもありかもしれない。

        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            // 再生ボタンを押したときの処理
            playButton.Activated += (object sender, EventArgs e) => {

                using (var p = new System.Diagnostics.Process())
                {
                    // iTunesで再生する
                    p.StartInfo.FileName = "osascript";
                    p.StartInfo.Arguments = "-e 'tell application \"iTunes\" to play'";

                    //出力を読み取れるようにする
                    p.StartInfo.UseShellExecute = false;
                    p.StartInfo.RedirectStandardOutput = true;
                    p.StartInfo.RedirectStandardInput  = false;

                    //実行
                    p.Start();

                    //出力を読み取る
                    var results = p.StandardOutput.ReadToEnd();
                    Console.WriteLine(results);

                    //プロセス終了まで待機する
                    p.WaitForExit();
                }
            };
        }

関連項目

参考文献