Shell関数の戻り値についてご教示ください。

解決


プログラムはじめ  2012-11-08 21:43:28  No: 103380  IP: [192.*.*.*]

いつもお世話になっております。
分からないことが出てきたのでご教示ください。

VBからPDFファイルを開く処理をやっています。

Sub test()
Dim Target As String
Dim ingPID As Long

Target = "C:\Users\ryo\Desktop\Visio2007_Startup_Shapesheet.pdf"

With CreateObject("Scripting.FileSystemObject")
    Target = .GetFile(Target).ShortPath
End With
ingPID = Shell("C:\Program Files (x86)\Adobe\Reader 9.0\Reader\AcroRd32.exe" & " " & Target)
AppActivate ingPID

End Sub

上記のコードでPDFのファイルが開いて前面に表示されますが、上記のコードを実行する前に別のPDFファイルを開いた状態で、上記を実行するとAppActivateでエラーになります。
タスクマネージャーで確認すると、PDFが開かれていない状態で実行した場合は、ingPIDがAcroRd32.exeのプロセスIDになっていますが、PDFを開いた状態で実行するとよく分からない値になっています。(Win32_processでプロセスIDの一覧を取得しましたがどれとも一致しません。)
Shell関数の戻り値はなにが返ってきているのでしょう?

編集 削除
魔界の仮面弁士  2012-11-09 01:07:17  No: 103381  IP: [192.*.*.*]

> Shell関数の戻り値はなにが返ってきているのでしょう?
プロセスID ですね。ヘルプでは「タスクID」という事になっていますけれど。
http://support.microsoft.com/kb/408441/ja
http://support.microsoft.com/kb/408064/ja


> Win32_processでプロセスIDの一覧を取得しましたがどれとも一致しません
Acrobat Reader/Adobe Reader は、ActiveX ドキュメントとして
IE 内でも開けるようになっているようですから、文書ファイルを
開く際に、少々特殊な動作をしているのだと思います。

もしかしたら、自身が起動された後、自分と入れ替えに他のプロセスを
呼び出すような形になっているのかも知れません(未確認)。


以前、PDF 表示中に ROT を列挙して Acrobat Reader のオブジェクトを
取得したことがあるのですが、起動後暫く立つと、一覧から
削除される結果となっていました。
http://www.hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=10330&reno=10322&oya=10322&mode=msgview&page=0

編集 削除
プログラムはじめ  2012-11-09 22:32:33  No: 103382  IP: [192.*.*.*]

魔界の仮面弁士様いつもありがとうございます。
仕事で遅くなってしまいました。
リンク先も含めて非常にためになる話ですので、じっくり読ませていただきます。

編集 削除
プログラムはじめ  2012-11-10 11:49:18  No: 103383  IP: [192.*.*.*]

> プロセスID ですね。

ありがとうございます。勉強になりました。PDFがむしろ特殊な挙動をしていたのですね。

ROTはMatthew Curland著 のAdvanced Visual Basic 6に記載があったため存在は知ってましたが、全く応用できてませんでした。(まだ上記の本は1割くらいしか理解できてません。)
.netだとこんなにきれいに記述ができるのですね。勉強になりました。

検索すると
http://www.xtremevbtalk.com/showthread.php?t=298539

にvb6やvbaでのROTの応用例が載っていました。魔界の仮面弁士様のコードを上記を参照しつつ、vb6やvbaのコードに書き換えを試みましたが、うまくできませんでした。(ExcelのV-tableの構造を使っているためでしょうか。)
もしよろしければ、vb6やvbaでの記載の仕方をご教示していただけないでしょうか?

編集 削除
プログラムはじめ  2012-11-23 15:45:20  No: 103384  IP: [192.*.*.*]

解決をチェックするのを忘れていました。
遅くなってすみません。

編集 削除