Wininet.dllを使う

 Wininet.dllはInternetExploreで使われている関数郡を集めたDLLで、InternetExplore3.02以上がインストールされている環境では必ず入っています。ちなみにWindows98、Windows2000では必ず入っています(IE4以上がOSに入っている為)。
 こいつを使うことにより、インターネットクライアントプログラムを比較的簡単に作ることができるようになります。んが、こいつは比較的最近できたAPIと言ってもよく、なんと言っても資料が少ないのです。つーわけで、HTML限定の簡単なサンプルと(私的)解説をば。え〜、はじめに断っておきますが、決してこの使い方があっているとは限りませんので、詳細はMSDNのWininet(http://msdn.microsoft.com/workshop/networking/wininet/wininet.asp)で調べて下さい。あと、間違っていたら教えてくらはい。つーか、正しい使い方を教えて(弱気)。
 なお赤い部分はWininet.dllの部分です。またunitのusesにWininetを加えておかないと未定義でエラーになります。

オフライン状態かどうか


function IsGlobalOffline: boolean;
var
  State, Size: DWORD;
begin
  Result := False;
  State := 0;
  Size := SizeOf(DWORD);
  if InternetQueryOption(nil, INTERNET_OPTION_CONNECTED_STATE, @State, Size) then
    if (State and INTERNET_STATE_DISCONNECTED_BY_USER) <> 0 then
      Result := True;
end;

 オフラインならTrue、オンラインならFalseを返します。


ダイヤルアップ接続を表示する


if IsGlobalOffline then
  if not InternetGoOnline('http://www.yahoo.com/', Handle, INTERENT_GOONLINE_REFRESH) then
    ShowMessage('接続はキャンセルされました。');

 上記の関数を使ってオフライン状態ならダイヤルアップ接続ダイアログを表示して、接続を促す。接続が選ばれると、指定したURLに接続しに行きます。


インターネットに接続している状態かどうか


function IsInternetConnected: boolean;
var
  ConnectType : DWORD;
begin
  ConnectType := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY;
  Result := InternetGetConnectedState(@ConnectType, 0);
end;

 インターネットに接続している状態かどうかを判別します。んじゃ、なんでオンラインとオフライン判別もあるかというと、インターネットに接続していてもオフラインの場合もあるからです。この場合は、キャッシュから取得することになります。


オンライン状態にする


if InternetAttemptConnect(0) = ERROR_SUCCESS then
  ShowMessage('オンラインになりました')
else
  ShowMessage('失敗しました。');

 オンラインにするには、この関数を使います。でも、これ使ってオンラインにしてもキャッシュから取得しちゃう場合があるような気がします(謎)。


HTMLファイルを取得


function GetFileFromInternet(const AUrl:string; AStream:TStream): boolean;
var
  hSession, hConnect: hInternet;
  Buf: array[0..1023] of Char;
  ReadCount: Cardinal;
begin
  Result := False;
  hSession := InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    hConnect := InternetOpenUrl(hSession, PChar(AUrl), nil, 0, 0, 0);
    try
      while True do //ストリームに書き込み
      begin
        if not InternetReadFile(hConnect, @Buf, SizeOf(Buf), ReadCount) then Break;
        if ReadCount = 0 then
          Break
        else
        begin
          AStream.Write(Buf, ReadCount);
          Result := True;
        end;
      end;
    finally
      InternetCloseHandle(hConnect);
    end;
  finally
    InternetCloseHandle(hSession);
  end;
end;

 URLで指定されたHTMLファイルを取得します(ストリームに書き込む)。エラー処理があまいカモ。


 たぶん、続かない…。
 意見・バグなどがあったら、伝書鳩にて。