トップページ⇒tech
16コメント7KB

IE履歴の編集をしたいのですが・・・

■ このスレッドは過去ログ倉庫に格納されています
0001メンタイの徒 NGNG
過去に訪れたサイトやフォルダのアドレスが保存されている'履歴'から
アドレスの取得や削除は出来るのでしょうか?
私が調べたところ、レジストリにHistoryとして指定された
フォルダにあるファイルに履歴情報を保存しているような感じなのですが、
それを操作する(つまり履歴を編集する)インターフェイスがわかりません。
どなたかご教示ください。

OSはWindows9xorNT系です。
開発はVC++で行っております。
よろしくお願いします。
0002SAGE NGNG
そのフォルダの中に
*.url ファイルで保存してるんだったと思うので、(違ったら御免)
INIを扱うのと同じ要領でいいんじゃないでしょか。
0003メンタイの徒 NGNG
私もそれは確認したのですが、
そのフォルダの中にはindex.datというファイルが1つあるだけなんですよ、
(exp等で見ると一見、フォルダとurlで構成されているように見えるのですが・・・)
IEでHistory管理に使ってるCOM IFが何かわかれば糸口が見える気がするんですけどね。

2さん、どうもありがとうございました。
00042 NGNG
およ。ホントだ。
じゃぁ、仕方ないのでindex.datを解析するとか。(^^;
0005名無しさん@お腹いっぱい。 NGNG
IUrlHistoryStg2
0006名無しさん@お腹いっぱい。 NGNG
とりあえずhttp://msdn.microsoft.comで検索したら?
All Words"InternetExplorer History Interface"とか検索すると
IUrlHistoryStg@`IUrlHistoryStg2とか出てきます。(IE5.5以降のみですが)
IOmHistoryはIE4以降で使えるみたいだけど、インターフェースが乏しいですね。
0007メンタイの徒 NGNG
おお、すばらしい!
これで何とか出来そうな気がします!!!
ほんと、ありがとうございます!
出来たら報告しますね!
0008メンタイの徒 NGNG

#include <windows.h>
#include <Mshtmlc.h>

int main(int argc@` char* argv[])
{
IOmHistory* pHisotry;
HRESULT hr;
DWORD cRef;
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_COmHistory@`
NULL@`
CLSCTX_INPROC_SERVER@`
IID_IOmHistory@`
reinterpret_cast<void **>(&pHisotry));
if (SUCCEEDED(hr))
{
// ここにこれない!
cRef = pHisotry->Release();
}
CoUninitialize();
return 0;
}

このような方法でインターフェイスの取得を試みたのですが、
下記のようなエラーが発生してしまいコンパイルが通りません。
どなたか、原因のわかる方はいらっしゃらないでしょうか?
よろしくおねがいします、

error LNK2001: 外部シンボル "_CLSID_COmHistory" は未解決です
fatal error LNK1120: 外部参照 1 が未解決です。
0009名無しさん@お腹いっぱい。 NGNG
これはコンパイルエラーじゃなくてリンカのエラー。
COM方面は疎いので大して力にはなれんが、足りないのがCLSIDの定義
のみであれば、UUID.LIBあたりをリンクすれば良いのではないかな。
0010メンタイの徒 NGNG
uuid.libを確認したのですが、デフォルトで組み込まれておりまして、
関係無いようなのです。
それ以外にも、libファイルは全て試したのですが、どれもダメでした。

う〜ん、わからんですよー・・・
0011バッカーです NGNG
http://ourworld.compuserve.com/homepages/w_baudisch/Homepage.htm
ここのサイトの主が
http://ourworld.compuserve.com/homepages/w_baudisch/HistoryInspector.htm
や
http://ourworld.compuserve.com/homepages/w_baudisch/HistoryReader.htm
を作っているのでとりあえずメールで聞いてみよう。

0012名無しさん@お腹いっぱい。 NGNG
IUrlHistoryStg2だったら使ったことがある

IUrlHistoryStg2* pHistory;
IEnumSTATURL* URLs;
_STATURL url;

CoInitialize(NULL);

hr = CoCreateInstance(CLSID_CUrlHistory@` NULL@` CLSCTX_INPROC_SERVER@`
 IID_IUrlHistoryStg2@` reinterpret_cast<void **>(&pHistory));

if(SUCCEEDED(hr))
{
 pHistory->EnumUrls( &URLs );
 while( celt == 1 )
 {
  URLs->Next( 1@` &url@` &celt );
 
  // url.pwcsTitle
// タイトル

// url.ftLastVisited
// サイトにいった日

// url.pwcsUrl
// サイトのURL

 URLs->Release();
 }
}

cRef = pHistory->Release();
CoUninitialize();
0013名無しさん@お腹いっぱい。 NGNG
ふつうこっちだよね
0014メンタイの徒 NGNG
遅くなりましてすいません。
>11
もう少しやってみてどうにもならないようでしたらダメもとですが、
メールしてみます。ありがとうございますね!
>12
IE5.5からの機能みたいなので、こっちが使用できないんですよ、
ターゲットが良くてIE4環境なので、IOmHistoryを使おうと思ったんです。
でも、すごく親切にして頂いてホントにありがとうございます。
0015名無しさん@お腹いっぱい。 NGNG
>14
IE5でもつかえたよ、たしか
ドキュメントはなかったが。
0016メンタイの徒 NGNG
>15
ターゲットがIE5じゃないんですよー(;;
IWebBrowser2は使用しているようですので、IE4以下ではないかと踏んでいるんです。

ところでみなさんはインターフェイスからCLSIDってどうやって調べてますか?
私はidlを見てるのですが、なにかもっといいやり方はあるのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています