ホームページのアイコンフルパス

(例えばhttp://www.sanwa-denshi.co.jp/favicon.ico)を用い、ホームページのアイコンをhicon変数として取得する方法を教えてください(開発環境VC6、Windows2000)。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/12/31 22:05:50
  • 終了:2007/01/07 22:10:03

回答(2件)

id:ardarim No.1

ardarim回答回数897ベストアンサー獲得回数1452007/01/01 12:32:42

ポイント35pt

アイコンをhiconとしてロード、取得するには少なくとも一時的にでもローカルにアイコンファイルをダウンロードする必要があります。


ダウンロードの方法はいろいろありますが、例えばWinINet APIを利用した場合は次のようになります。

(1)InternetOpenでWinINetハンドルを取得する

(2)InternetOpenUrlでアイコンフルパスを指定してURLハンドルを取得する

(3)InternetReadFileでURLからアイコンデータを取得する

(4)アイコンデータをローカルファイルとして保存する

(5)LoadImageでローカルファイルとして保存したアイコンからHICONを得る


アイコンを利用した後不要であればアイコンファイルは削除します。

id:harunoharuno

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

InternetReadFileで何バイト読み込めばアイコン読み込めるかが解りません。

http://www5d.biglobe.ne.jp/~tomoya03/shtml/colum/IconFo.htmにあるように766でしょうか?それとも、ファイルサイズを

調べるAPIなどがあるのでしょうか?

2007/01/05 09:26:10
id:ardarim No.2

ardarim回答回数897ベストアンサー獲得回数1452007/01/07 18:15:11

ポイント35pt

アイコンファイルと一言で言っても、サイズが常に同じとは限りませんので、ファイル全体を保存するのが良いと思います。


InternetReadFile()を使ってファイル全体を保存するには、InternetReadFile()で適当なバイト数ずつ読込んではWriteFile()でローカルに書き込み、それをファイル終端になるまで繰り返し行います。

ファイル終端の条件は、InternetReadFile()がTRUEを返し、且つ読み取ったバイト数(lpdwNumberOfBytesRead)が0の時です。


簡単なサンプルです。たぶん動くと思いますが動作確認はしていません。エラー処理等も一切行っていませんので、必要に応じて拡張してください。

BOOL DownloadFile(LPSTR szUrl, LPSTR szCacheFile)
{
    HINTERNET hInternet;
    HINTERNET hUrl;
    HANDLE hCacheFile;
    char buf[1024];
    DWORD dwBytesRead, dwBytesWritten;
    BOOL result = FALSE;

    hInternet = InternetOpen("", 0, NULL, NULL, 0);
    if(hInternet == NULL) return FALSE;

    hUrl = InternetOpenUrl(hInternet, szUrl, NULL, 0, 0, 0);
    if(hUrl != NULL){
        hCacheFile = CreateFile(szCacheFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        if(hCacheFile != INVALID_HANDLE_VALUE){
            while(1){
                if(InternetReadFile(hUrl, buf, 1024, &dwBytesRead)){
                    if(dwBytesRead == 0){
                        // ファイル終端に到達
                           result = TRUE;
                        break;
                    }
                    WriteFile(hCacheFile, buf, dwBytesRead, &dwBytesWritten, NULL);
                }
            }
            CloseHandle(hCacheFile);
        }
        InternetCloseHandle(hUrl);
    }
    InternetCloseHandle(hInternet);

    return result;
}

ダミー

http://q.hatena.ne.jp/1167570347

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません