tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 を持つエントリがあった場合に、
先頭のものしか取得できないという問題もあります。適宜修正してみてください。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。