水の記録

「写真は記録である」ことを追求し、日々の記録をしています。

Profile

bourne
profile

掲載写真使用機材
 Tvs-D , D100 , GRD , D200 , P5000

管理人にメッセージがある場合はこちらまでメールしてください。(@が全角になっています)
by bourne

NewEntries

RecentComments

RecentTrackback

affiliate



森山大道

ブログエントリー

RICOH GR DIGITAL


Nikon COOLPIX P5000

InDesign JavaScriptでのwait

仕事でやっているDTP関連のプログラミングのことを少し。

InDesignCS2でJavaScriptを使ってマルチページのPDFファイルのページ数を取得するため、JavaScriptからPDFのページ数を取得するためのVBScriptを書き出し、scriptArgsメソッドを使って取得したページ数を受け渡ししています。

このとき、書き出したVBScriptをexcute()で実行し、すぐにscriptArgs.getしても値が取れません。
これは、excute()メソッドは実行(起動)できたかどうかのみをチェックしているため、VBScriptの処理が完了するのを待たずに、処理を継続しているためと思われます。

そこで、JavaScriptの方で一定時間処理を中断させることでVBScriptの処理を優先させたいのですが、InDesignのJavaScriptにはsetIntervalが実装されていないようです。ほかに処理を中断させる方法はないかとググってみたところ、$.sleep()というメソッドが見つかったのですが、試してみると確かに処理は中断するのですが、その間もJavaScriptはビジー状態で、バックグラウンドのVBScriptの処理が進んでくれません。

ほかに何か処理を中断させる方法はないかと思案していたのですが、ふと、「alert()関数は処理を中断するなぁ」と思い、試してみました。

書き出すVBScriptに以下の処理を記述します。

Set wshshell = WScript.CreateObject("WScript.Shell")
Do While wshshell.AppActivate("Script Alert")
wshshell.sendkeys("{ENTER}")
WScript.Sleep 100
Loop


VBScriptをexcute() で実行し、すぐに

alert("please wait");

などのalertを出します。

このalertは"Script Alert"というタイトルのダイアログとなるので、
VBScriptでは"Script Alert"というタイトルのダイアログがなくなるまでループし、ダイアログに"{ENTER}"を送信し続け、ダイアログを終了します。これによって、JavaScriptの処理が再開されます。

私のググり方が悪いのか、ほかにいい方法が見つけれなかったので、ほかの方法をご存知の方がおられればお教えいただければなぁ、と思います。というか、教えてください。

ちなみにPDFのページ数を取得するVBS

Set objAcroPDDoc = CreateObject("AcroExch.PDDoc")
objAcroPDDoc.Open("c:/hoge.pdf")
Dim myReturn
myReturn = CStr(objAcroPDDoc.GetNumPages())

| プログラミング | Comments(0) | Trackback(0) |
| HOME | >>

Calender

<< 2008年10月 >>
S M T W T F S
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

Categories

Archives

Links

身長 cm
体重 kg

無料ホームページ アフィリエイト レンタルサーバー 1GB!FC2ブログ 冠婚葬祭

Powered By FC2. Designed By Seedleaf.