IEのオンライン・オフラインの切り替え

インターネット関係のプログラミングをする際、WinInetを使用すると
簡単にインターネットにアクセスするプログラムが作成できます。
(Internet*系API、MFCならCInternet*系クラスの事です。)
しかし、これらWinInetを使用したAPIはブラウザがオフラインだと正常に機能しません。
これはオンライン/オフラインとはブラウザの事ではなくシステムの事を指すからです。
基本的にシステムがオフラインだとWinInetではインターネットにアクセスできません。
そこでオンライン/オフラインを切り替える作業が必要になります。

では、まずは現在オンラインかオフラインか判断する方法です。


#include <afxinet.h> // 追加

CInternetSession session;
DWORD dwValue;
session.QueryOption(INTERNET_OPTION_CONNECTED_STATE, dwValue);
if (dwValue & INTERNET_STATE_CONNECTED)
    AfxMessageBox("オンラインです。");
else
    AfxMessageBox("オフラインです。");

最初にWinInet系のクラスを使う場合はafxinet.hをインクルードする必要があります。
現在のインターネットオプションの各設定値を知るには
CInternetSession::QueryOption()で調べる事が出来ます。
システムがオンラインかオフラインかを調べる場合は1番目の引数に
INTERNET_OPTION_CONNECTED_STATEを指定してください。
するとオンラインの場合は2番目の引数で指定したDWORD型変数に
INTERNET_STATE_CONNECTEDが格納されます。
ちなみにオフラインの場合はINTERNET_STATE_DISCONNECTED_BY_USERが格納されます。
但し、他のフラグも同時に格納される場合があるかもしれないので
単純に==(イコール)で比較しないで、&でフラグが含まれているか調べてください。

次は、オンライン・オフラインを切り替える方法です。


// 引数 bConnected オンラインにする場合はTRUE、オフラインならFALSEを設定。
void SetInternetConnected(BOOL bConnected)
{
    CInternetSession session;
    INTERNET_CONNECTED_INFO ici;
    if (bConnected)
    {
        // オンラインに設定
        ici.dwConnectedState = INTERNET_STATE_CONNECTED;
        ici.dwFlags = 0;
    }
    else
    {
        // オフラインに設定
        ici.dwConnectedState = INTERNET_STATE_DISCONNECTED_BY_USER;
        ici.dwFlags = ISO_FORCE_DISCONNECTED;
    }

    // 切り替え
    session.SetOption(INTERNET_OPTION_CONNECTED_STATE, &ici, sizeof(ici));
}

設定を変更するにはCInternetSession::SetOption()を使用します。
この関数の1番目の引数にINTERNET_OPTION_CONNECTED_STATEを指定し、
2番目の引数にINTERNET_CONNECTED_INFO構造体のポインタを設定してください。
INTERNET_CONNECTED_INFO構造体は現在のシステムがオンラインかオフラインかの情報を含みます。
オンラインにする場合はdwConnectedStateINTERNET_STATE_CONNECTEDを設定し
dwFlagsを 0 に設定してSetOption()を呼び出してください。
dwConnectedStateINTERNET_STATE_DISCONNECTED_BY_USERを設定し
dwFlagsISO_FORCE_DISCONNECTEDを設定するとオフラインになります。

< 戻る << HOME ©1999-2001 by Akky, All right reserved.