投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/6/15 10:58:11
ShellExecute API を使うぐらいなら、Process クラスを使った方がスマートだと思いますよ。
ただ、それで解決するかどうかは別問題ですけれども。

> Link = "D:\Test\Test.pdf#page=4"
ShellExecute(Ex) や Process.Start でパラメータを渡す場合には、"#" でパラメータを繋ぐのではなく、
 ShellExecute の場合: lpParameters 引数
 ShellExecuteEx の場合: SHELLEXECUTEINFO.lpParameters フィールド
 Process.Start(String, String) の場合: arguments 引数
 Process.Start(ProcessStartInfo) の場合: ProcessStartInfo.Arguments プロパティ
などでパラメータを渡すようにします。 
 
ただし、そのパラメータがどのように利用されるのかは、*.pdf に関連付けられた
アプリケーション(Adobe Reader、Foxit Reader、Sumatra PDF 等々)に依存しています。

その結果、○○ というPDF リーダーならば***のようにすれば表示できるが、
++ というPDF リーダーでは、ページ指定は不可能…といった事態が生じえるため、
そもそも汎用的な方法という物は存在しませんし、PDF リーダーごとに異なる処理が必要です。

なお、Adobe Reader がサポートしているコマンドラインには、下記の物がありますが、
ページ番号の指定方法は見当たりませんでした(他の PDF リーダーについては未調査です)。
http://kb2.adobe.com/jp/cps/510/510705.html


> よい方法があればご教授ください。
ちなみに、Acrobat Reader コントロール (AcroPDF.DLL) を用いた場合には、
下記のようにして、フォーム上に PDF を表示させる事もできます。

AxAcroPDF1.LoadFile("D:\Test\Test.pdf")
AxAcroPDF1.setCurrentPage(4)