タイトル : Re^7: 実行中のACCESSファイル群のパス取得方法 投稿日 : 2010/11/27(Sat) 10:30 投稿者 : 魔界の仮面弁士
> 試しに、デスクトップ上の pdf ファイルをダブルクリックで起動し、 > ファイルが Adobe Reader 8 で開かれた状態で先のサンプルを > 起動してみたところ、TypeName が "IAcroAXDoc" なオブジェクトを取得できました。 この "IAcroAXDoc" オブジェクトの型は、 Adobe Acrobat 8.0 Type Library C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.dll のものが使われているようでした。 また、このオブジェクトは 以下の 3 つのメンバーを持っていました。 Event Stop() Function Application() As Object Function Document() As Object ただし、Application メソッドも Document メソッドも、実際に呼び出すと 未実装例外を返してしまいました。どうやらメンバーのみで、中身は無いようです。 '未実装例外(NotImplementedException) が発生してしまう Dim doc As Object = o.Document > なお、ローカルの PDF ファイルを開くのではなく、Web 上の PDF を > IE 上で開いた場合は、ROT に表示されず、先の手法では見えませんでした。 ROT には見当たりませんでしたが、対象の InternetExplorer オブジェクトの Document プロパティから、"AcroPDF" 型のオブジェクトを得ることができました。 こちらの型情報は Adobe Acrobat 7.0 Browser Control Type Library 1.0 C:\Program Files\Common Files\Adobe\Acrobat\ActiveX\AcroPDF.dll のようです。 この場合 src プロパティで文書ファイルの場所を得られました。 '"http://www.nta.go.jp/tetsuzuki/shinsei/annai/gensen/pdf/h22_01.pdf" を得られた MsgBox(doc.src) といっても、この場合には AcroPDF の src プロパティを使うまでもなく、 InternetExplorer オブジェクトの locationURL プロパティで 同じ内容が取得できますけれどね。 Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click Dim ShellWindows As Object ShellWindows = GetObject("new:9BA05972-F6A8-11CF-A442-00A0C90A8F39") ListBox2.Items.Clear() Dim cnt As Integer = CInt(ShellWindows.Count) For n As Integer = 0 To cnt - 1 Dim ie As Object = ShellWindows.Item(CObj(n)) ListBox2.Items.Add(String.Format("[{0:x8}] ({1},{2}) - '{3}'" _ , ie.HWND, ie.Left, ie.Top, ie.LocationName)) Dim doc As Object = ie.document ListBox2.Items.Add("=>" & TypeName(doc)) 'ListBox2.Items.Add("=>" & doc.src) If doc IsNot Nothing Then Marshal.ReleaseComObject(doc) End If Marshal.ReleaseComObject(ie) Next Marshal.ReleaseComObject(ShellWindows) End Sub >>> 何故かPDFはGetObjectFromROT(dispName)が取れませんが 先の No.10324 の実装だと、同じ dispName を持つエントリがあった場合に、 先頭のものしか取得できないという問題もあります。適宜修正してみてください。 |