履歴フォルダ内アイテムのURLを得るには?


カバ  2004-05-29 00:58:29  No: 83625

Explorerで履歴フォルダを見ると、「インターネットアドレス」と「タイトル」
カラムの両方にタイトルが表示されます。
しかし、マウスカーソルを当てると、ツールチップにアドレスが表示されます。
また、プロパティシートのダイアログを表示してもアドレスが表示されます。

Windows98 + IE5.5 + VB6 で、履歴フォルダ内アイテムからWeb Pageアドレス
を得る方法を教えて下さい。(ツールチップやプロパティシートに表示する
方法ではなく、直接にアドレスを得る方法です。)
Explorerと同様、履歴フォルダ内アイテムの表示まではできています。

以上、宜しくお願いします。


魔界の仮面弁士  2004-05-29 08:02:36  No: 83626

Win98ですか……。

WinME/Win2000より前のOSで使えるかどうかはわかりませんが、
IE5.5以降でサポートされている「IUrlHistoryStgインターフェイス」を
使うことで、それらの情報にアクセスできるかも知れません。

# VBから操作するとなると、手続きが面倒ですけど。


カバ  2004-05-29 19:32:56  No: 83627

回答ありがとうございます。

IUrlHistoryStgインターフェイスのメソッドを調べてみたんですが、
URLを渡す必要があるものばかり(例えばIUrlHistoryStg::QueryUrl)
で、どうしたらいいかわかりません。

ご教授お願いします。


魔界の仮面弁士  2004-05-30 00:08:19  No: 83628

イメージ的には、こんな感じですかね。
ただし、参照設定用のタイプライブラリが標準では用意されていないので、
それは別途用意する必要があります。

Dim oUrlHistoryStg As IUrlHistoryStg
Dim oEnumSTATURL   As IEnumSTATURL
Dim udtStat        As STATURL
Dim Fetched        As Long

Set oUrlHistoryStg = New URLHistory
Set oEnumSTATURL = oUrlHistoryStg.EnumUrls()

'フィルタするかどうかは任意
oEnumSTATURL.SetFilter "http", STATURL_QUERYFLAG_TOPLEVEL

Do
    Fetched = 0
    On Error Resume Next
    oEnumSTATURL.Next 1, udtStat, Fetched
    On Error GoTo 0
    If Fetched <> 1 Then
        Exit Do
    End If
    '
    'STATURL構造体(udtStat)のメンバを取得するためのコードを記述
    '
Loop
Set oEnumSTATURL = Nothing
Set oUrlHistoryStg = Nothing

なお、STATURL構造体から取得できるのは、
  ・URL(pwcsUrl)
  ・タイトル(pwcsTitle)
  ・最終訪問日時(ftLastVisited)
  ・最終更新日時(ftLastUpdated)
  ・有効期限(ftExpires)
  ・フラグ(dwFlags)
の6項目です。


カバ  2004-05-30 03:52:47  No: 83629

サンプルの提供ありがとうございます。

タイプライブラリは、以下から入手できました。
http://www.mvps.org/emorcillo/vb6/tlb/olelib.shtml

履歴フォルダ内アイテムの表示に使った、IShellFolderインターフェース
のタイプライブラリもここのものを使っていましたので。

試してみた結果を報告します。
履歴フォルダ内アイテムから「タイトル」および「最終表示日時」を取得
して、IUrlHistoryStg::EnumUrlsメソッドで列挙した「タイトル」および
「最終訪問日時」と一致したアイテムのURLを返すことで、ほぼ成功します。
ただ、::EnumUrlsメソッドで得た「タイトル」には、空白(タイトルなし)
の場合が幾つかありました。タイムスタンプの最後が分単位の文字列で比較
しているためか、両者が同じ場合だと区別できないことがありました。
あと、アイテム数が多いので、少し時間を要する場合もありました。

かなり有力な方法とは思いますが、検索を使用しないで、シェルアイテム
のPIDLから直接アドレスを得る方法ってご存知ないでしょうか?


カバ  2004-05-31 20:30:03  No: 83630

前回の結果に誤りがあったので訂正します。
履歴フォルダ内アイテムの「最終表示日時」と::EnumUrlsメソッドの
「最終訪問日時」が一致する。
と報告しましたが、大多数は一致しませんでした。
確認に使用したデータが一致しただけでした。
「最終表示日時」の方が古い日付になっている様です。

他に適当な方法が見つからないので、これで行こうと思っていたのに
振り出しに戻ってしまいました。
何か、方法ないでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加