まいど、かなり一方的にお世話になっております。
ちょっとテストをお願いしたいのですが、よろしければご参加ください。
8月早々すみません(意味不明だけど)
やる事は、CS3以降のInDesignまたはIllustratorから、
他CSバージョンのPhotoshopを制御しようとするテストです。
対象となる環境は、CS3以降の複数バージョンがインストールされたMac/Winです。
CS3以降の、任意のバージョンのInDesignまたはIllustratorからスクリプトを実行して頂きます。
その際、単体/複数バージョンのPhotoshop達の起動状況によっての挙動を知るためのテストです。
ソフトをCriativeSuiteではなく単体で導入された環境は特に貴重なサンプルとなります。
ぶっちゃけ、仕上げ屋の旦那様が過去にやった事そのまま、と言ってしまえば聞こえは悪いんですが、
共有すべき情報の継承、とお考え下さい。
スクリプトを実行すると、数秒でログファイルの保存場所を指定するよう促されます。
てけとうな名前を付けてください。
まことお手数ですが、拡張子はセルフサービスとなっておりますorz
最後に、ターゲットとなったPhotoshop上で「check」とアラートが出て終了です。
複数あるバージョンのPhotoshopからドレをターゲットとして選定するかは、
以下の優先順位にのっとります。
・起動している物 > 起動していない物
・実行アプリと同一のCSパッケージの物 > それ以外の最上位バージョン >>> 最下位バージョン
この優先順位を守った挙動が得られれば使用したバージョンのみの報告で十分です。
そうでなかった場合、ログファイルの内容をコメント欄にペーストして頂ければすごく助かります。
InDesignかIllustratorかは、同じ結果が得られるのでどちらかだけで大丈夫です。
InDesignCS4で一度実行したらIllustratorCS4からは不要、ということです。
これに対しPhotoshopの起動状況を手動で幾通りか変えてやらないといけません。これが面倒なのですが。。
・何も起動していない状態
・どれか1つだけ起動している状態
・複数バージョンが同時に起動しちゃってる状態(本数ぶん、組み合わせが多岐にわたります)
もちろん、できる範囲内で構いません。
とはいえ、なるべく多様なサンプルをお待ちしております。
現状で判明しているイレギュラー
・PhotoshopCS2が起動した状態でInDesignCS3から実行すると締めのアラートが出ずに終了する。
その後、PhotoshopCS2を終了させ再度スクリプトを実行するとPhotoshopCS3が自動で起動し、
溜まったアラートが2回出る
・InDesignCS3から、PhotoshopCS5.1が見えなかった
1)何も起動せずにIDCS3で実行→PSCS3が起動
apps[6]
photoshop-10.0
ISNOTRUNNING
Windows XP 5.1 Service Pack 2
Application
indesign-5.0-ja_jp
Target
photoshop
2)PSCS2起動済で、IDCS3で実行→無反応
apps[6]
photoshop-10.0
ISNOTRUNNING
Windows XP 5.1 Service Pack 2
Application
indesign-5.0-ja_jp
Target
photoshop
流星さんさっそくありがとうござまーす^
って、やっぱりCS2、弾ききれてませんね…あい困った。。
他の方も同様の書式で続いて頂けたら助かりますー。
ご無沙汰しております。
CS6とCS4の環境です。CS5は入っておりません。
期待通りの動作だと思います。
只、最後のアラートが出なかったので。
bt.body=uneval(function(){alert(“check”)})+”()”;
ここだけ修正したらアラートが出ました。
何故かはわかりませんが。
ログは以下の通りです。
1) IDCD6 -> PSCS6起動
apps[28]
photoshop-11.032
ISNOTRUNNING
apps[29]
photoshop-60.032
ISNOTRUNNING
Macintosh OS 10.8.0
Application
indesign-8.0
Target
photoshop
2)IDCS6 -> PSCS6
apps[28]
photoshop-11.032
ISNOTRUNNING
apps[29]
photoshop-60.032
IDLE
Macintosh OS 10.8.0
Application
indesign-8.0
Target
photoshop
3)IDCS4 -> PSCS4 起動
apps[28]
photoshop-11.032
ISNOTRUNNING
apps[29]
photoshop-60.032
ISNOTRUNNING
Macintosh OS 10.8.0
Application
indesign-6.0
Target
photoshop
4)IDCS4 -> PSCS6
apps[28]
photoshop-11.032
ISNOTRUNNING
apps[29]
photoshop-60.032
IDLE
Macintosh OS 10.8.0
Application
indesign-6.0
Target
photoshop-60.032
kamisetoさん、ありがとうございまーす^^
アラート出ないorz 今回の根幹とは無縁だけど個人的にすごい困りますわ。。なんなんだろ。
checkの括りをシングルクォーテーションにしたら直るとか…(あてずっぽ)
関数内に//〜のコメントがあるとコケるのは確認済みだったんですが。。いろいろあるなあ。
なお、流星さんのCS2問題は、複数バージョンを同時起動できないというOS仕様上のアレだったっぽいとのことです。
PSCS2起動中なのをIDCS3は認識せず、PSCS3を起動しようとし、エラー(おつかい貯まる)、次回、PSCS3起動時にまとめて払わされる と推測、とのこと。
いろいろあるなあ。。
と、いちおう自分環境。CS3とCS4だけがあるMacでは全く問題ナシで額面通り動作しました。
一例で、PSCS3起動状態からIDCS4で実行
apps[11]
photoshop-10.0
IDLE
apps[12]
photoshop-11.032
ISNOTRUNNING
Macintosh OS 10.6.8
Application
indesign-6.0
Target
photoshop-10.0
お役に立てば良いのですが…
1) InDesign CS3とInDesign CS5起動中
InDesign CS3からスクリプト実行
Photoshop CS5が起動中だったが、
Photoshop CS3が起動
アラートは出ませんでした。
apps[8]
photoshop-10.0
ISNOTRUNNING
Macintosh OS 10.6.8
Application
indesign-5.0-ja_jp
Target
photoshop
——————————————–
2) ID CS3、PS CS3のみ起動中
Photoshop CS3が起動
アラートは出ませんでした。
ログファイルの内容は同じでした。
——————————————–
3) InDesign CS3とInDesign CS5起動中
InDesign CS5スクリプト実行
Photoshop CS5が起動
アラートは出ませんでした。
yoshimotoさま>
ありがとうございます。ひじょうに有用であります。助かっております。
アラート全滅というのがなんとも……あorz
手元でテストしたスクリプトをアップする直前にコメント追加したせいだ。。
gdgdですみません、修正しておきました。
あと、お手数ではありますがCS5から実行された 3)のログがあると助かりますー;
————————
現状のプチまとめ
CS3からCS5は見えていない
CS3からCS6は不明 *
CS4からCS5は不明 *
CS4からCS6は見えている
あと、Twitter上でtenさんも言ってたけど、CS6のバージョン表記が
なぜか60.032……13.032とかじゃないのね。なんだロクジュウって。。
任意のバージョンのPhotoshopを制御するには正式な名前で呼んでやらないといけない。
悪魔祓いみたいだな。
で、たぶんapps配列に入っていないアプリケーションはBridgeTalkで制御できない。
うーん。
追加ー。
CS4とCS5が入ったMacでは問題なく動作。
apps[13]
photoshop-11.032
IDLE
apps[14]
photoshop-12.032
ISNOTRUNNING
Macintosh OS 10.6.7
Application
indesign-7.0
Target
photoshop-11.032
問題はIDCS3→PSCS5なのであるなあ。
失礼しました。
アラートが出ない以外は
期待通りの動作と勝手に考えてしまいました。
3)のログです。
apps[15]
photoshop-10.0
ISNOTRUNNING
apps[16]
photoshop-12.032
ISNOTRUNNING
Macintosh OS 10.6.8
Application
indesign-7.0
Target
photoshop
yoshimotoさん、ありがとうございます。こちらの不手際に付き合わせてしまい恐れ入ります^;
あとはー
CS3→CS6のサンプルが欲しいなあ。
トライアル…入れるかぁ。
CS2、CS3、CS5、CS5.5 な同僚さんマシンでテストさせてもらいました。
結果、apps配列の中はCS3アプリばっかり。
BridgeTalk.getSpecifier(“photoshop”, 12)の戻り値はnull。
BridgeTalk.ping(“photoshop-12.032”)はISNOTINSTALLED。
どうもアカンっぽいですorz
つまり、現状制御不能。
CS6もこの延長なんでしょうか。可能性としてはとても濃い。
すでにとっくに解決済みとは思いますが、今後これを見る通行者の皆様へ。
とどのつまり、「ホストアプリが命令を送信するbridgeがどこまで把握しているか?」が全てのようです。bridgeから見てアッパーバージョンのアプリは未知のアプリなので把握しきれない。
ただし、なぜか「.isRunning」はバージョンも記載された文字列で指定すれば通ります。恐らく、事前チェックは行わず、adobeがバックグラウンドで構築しているストリームにブロードキャストし、手を挙げたものがいればtrueを返すだけなのでしょう。
また、バージョン表記ですがCS4までは「〜11」というものですが、CS5以降は「50、55、60」のようになっています。
そして、「.032」というのはサブバージョンではなく、アプリのビット数を表しています。つまり、32bit版か64bit版か。
結局のところ、バージョンに差があるやりとりは、全バージョンについて.isRunningをかけるしかないようです。いずれにしても起動してない限りは通信できないので、あらかじめ対象アプリの「起動必須」という仕様で問題ないと思います。
もし、複数起動しているのを確認した場合はユーザーに判断させるか、アッパーバージョンを優先する、もしくはそれらを事前設定してもらう仕様に。
通りすがる人々の道標に。
訂正です。
>また、バージョン表記ですがCS4までは「〜11」というものですが、CS5以降は「50、55、60」のようになっています。
は、
また、バージョン表記ですがCS5までは「〜12」というものですが、CS5.5以降は「55、60」のようになっています。
です。
>リハがり者さま(略した)
有用な情報提供感謝致します。
5.5以降のバージョン表記、および32bit版か64bit版か、まったく気付けませんでした。。大変参考になりました。
サブバージョンではないと判明した以上、おっしゃる仕様でよろしいかと。
起動中か、起動可能か、まではよさそうですが、BridgeTalk制御可能か、(さしあたり問題のあったCS3→CS5を指します)の調査は手が付けられ次第、追って報告します。
こちらもぼちぼちリハビリできそうな気配が漂っておりますが…直面している他の問題や作業が片付きしだい…
夏休みまでには_(:3 」∠)_
バージョン表記について追記。
CS4:
Photoshop Windows版には32bitと64bitがありますが、Mac版は32bitしかありません。
CS5以降:
Win、Macともに両bitありますが、Macでは常に.032というレスポンスになります。これは、Win版は個別のアプリが2つですが、Mac版は両bitがコンポーネント化されており、システム側の設定(アプリファイルのプロパティ=情報を見るで変更する)に依存していることに起因するものと思われます。
よって、たとえ事前に送信対象アプリを把握していても、Macの場合、狙い撃ちで起動することは困難ということになります。やはり「起動済」が前提となるでしょう。
なお、「.target」や「.isRunning」に指定する文字列は、CSレベルが一致したESTKで得られる「.getSpecifier(photoshop)」の値で動作します。
余談:
Mac版に32bitが消えれば、こちらは.064のみになるかもしれませんが、Wind版はWindows7-32bitが衰退するまでは、Photoshopも32bitが存在するでしょうから、しばらくはこの表記にお付き合いすることになるでしょう。
どもども。
CC騒ぎで次期バージョンがどういう表記になるか、また様子見が必要になる可能性もありますが、
バージョン表記の小数化を嫌って5.5→55 という事であれば、
てきとうに100.064から10.032までループかけてtry{}で括れば…てのは無茶でしょうか。。
Photoshopがひとつも起動していない場合(試してませんすみません)
for( i = 100.064; i < 10.032; i-=0.32){
i = ( i % 1 != 0.32)? i : i – 0.68;
try{
BridgeTalk.launch( “photoshop-“+i );
}
catch{}
if( BridgeTalk.isRunning( “photoshop-“+i ){
break;
}
else{
if( i == 10.032){
alert(“any photoshops is not installed.”);
exit();
}
}
}
…みたいな。
自動起動にこだわる気持ちはわかりますが、brigeが認識できるのは水平バージョンのアプリだけなので、仮にターゲットが明らかになっても、上位バージョンの「.launch」は不可能です。実際、CS3系のアプリからの「BridgeTalk.launch(‘photoshop-55.064’);」にはfalseを返します。 ※ESTK3.5はCS5とCS5.5を認識します
ただし、「送りつける系」のメッセージは通ります。恐らくこれは…推測の域を出ませんが…先のコメントで書いたとおり、それらのメッセージはbrideがadobeがバックグラウンドで保持しているストリームにブロードキャストし、それに該当したアプリが受け取り・消化する仕組みになっているのでしょう。
なお、この類のメッセージは「バージョンの段差がある送信先」からも正しく受信出来ます。多分…これも推測の域を出ませんが…このフックになっているのが「.onResult」などなのでしょう。このフックをbridgeに掛けておけば、送信先からbride宛に戻ってきたメッセージが「誰が待っているものか?」がわかる、と。
私は、ルーターがLANとWANの狭間で、ブロードキャストしたりIPアドレス変換を行っているようなイメージでとらえています。
BridgeTalkからの起動はあきらめてPhotoshopの起動を前提とするにしても、アプリの正確な名称が必要になる「.isRunning」で、どうやって起動しているアプリを特定するかという問題が残ります。
これは既存のバージョン名をデータベース式に照合するしかないと考えます(ループという点では氏のサンプルに近い)。完全に総当りできるならともかく、次期バージョンは全く違った表記になる可能性が大いにあります。そうなれば結局こちらもアップデートが必要になります。ならば既存のバージョンにだけに対応すると割りきり、新たなバージョンが出てきた時にはこちらもアップデートするのが幸せかと思います。
少なくても…いや、ま、それはまだ「もしも」の話です。
追記。
cs3とcs4は切り分けて判定しなければならないとか、CS3の地域名はどうするかなど、考えるほどにデータベース型のほうがわかりがいいように思います。
幸い問題になりそうなのはcs3の海外版。これも問合せがあったらリストに加える、というスタンスでいいんじゃないでしょうか。
リハがり者さま(定着w
おおよそ掴めてきたような気がしてきています…
時間がとれ次第、アレ(アレってアレ)の方に組み込むべく精査の上、カタチが上がってきたら、迷える方々の指標にすべくこちらの記事に改めて反映させて頂きます。
ありがとうございました^