インターネット接続の有無を調べるコード – プログラミング – Home

インターネット接続の有無を調べるコード
 
通知
すべてクリア

[解決済] インターネット接続の有無を調べるコード


確変
 確変
(@確変)
ゲスト
結合: 13年前
投稿: 35
Topic starter  

MFC, SDI です。

インターネットに接続しているかどうかを調べるコードを書きたいのですが、うまくい
きません。

http://www.cfanatic.com/topic49/
このページを見つけたのでやってみましたが、ビルドすると
「'InternetGetConnectedState' : 1 番目の引数を 'int' から 'LPDWORD' に変換でき
ません。」
となります。
Wininet.h や wininet.lib ファイルを入手する必要があるのでしょうか。

よろしくお願いいたします。


引用未解決
トピックタグ
AR2
 AR2
(@ar2)
Estimable Member
結合: 5年前
投稿: 110
 

 InternetGetConnectedState()の第一引数は、戻り値でもあるのでポインタを指定しな
ければなりません。
 APIの詳細はMSDNを参照すると良いでしょう。
http://msdn.microsoft.com/ja-jp/library/aa384702

>Wininet.h や wininet.lib ファイルを入手する必要があるのでしょうか。

 OSやMFCのバージョンにもよりますが、最近のVCがインストールされている環境なら、
インクルードファイルやライブラリファイルは含まれているはずです。


返信引用
確変
 確変
(@確変)
ゲスト
結合: 13年前
投稿: 35
Topic starter  

AR様、有り難うございます。
教えて戴いたMSDNの InternetGetConnectedState() は見ていたのですが、第1変数は
LPDWORDなのに取るべき値は INTERNET_CONNECTION_LAN 等の int が示されていて、理解
できずにいます。

LPDWORD lpdwFlags;
if (InternetGetConnectedState(lpdwFlags, 0) == FALSE)
{
// Don't attempt connection
}

としたとき、lpdwFlags に INTERNET_CONNECTION_LAN 等の値を代入する仕方が解りませ
ん。
初心者です。よろしくお願いいたします。


返信引用
AR2
 AR2
(@ar2)
Estimable Member
結合: 5年前
投稿: 110
 

>としたとき、lpdwFlags に INTERNET_CONNECTION_LAN 等の値を代入する仕方が解りま
せん。

 「LPDWORD」とは「DWORD*」と同じ意味を持ちます。
 LPという接頭語は「LONG POINTER」の略だったかな。

 ポインタの使い方はC言語の最低限の基本なので、しっかりマスターする事をお奨めし
ます。

DWORD lpdwFlags = INTERNET_CONNECTION_LAN;
if (InternetGetConnectedState(&lpdwFlags, 0) == FALSE)
{
// Don't attempt connection
}


返信引用
確変
 確変
(@確変)
ゲスト
結合: 13年前
投稿: 35
Topic starter  

ご教示ありがとうございました。
基本が解っていなくて恥ずかしいですが、ともかくやってみました。

DWORD dwFlags = INTERNET_CONNECTION_MODEM;
BOOL bOnline = InternetGetConnectedState(&dwFlags, 0);
if (bOnline) MessageBox(_T(TRUE));
else MessageBox(_T(FALSE));

自分のPCはモデムでインターネット接続していて、LAN接続はしていません。
上記を動作させると、インターネット接続を切断していても TRUE になります。
dwFlags に INTERNET_CONNECTION_LAN を入れても、INTERNET_CONNECTION_PROXY を入れ
ても同じく常に TRUE です。
困りました。


返信引用
AR2
 AR2
(@ar2)
Estimable Member
結合: 5年前
投稿: 110
 

 INTERNET_CONNECTION_MODEMって、電話回線に繋がってるものなのでADSLモデムなら
LANですよ。

 InternetGetConnectedStateからのTRUEの返り値は、インターネットへの少なくとも1
つの接続が利用可能であることを示します。
 また、このAPIは接続キャッシュの影響を受けるので、環境によってテストが難しかっ
たと記憶しています。

 あと、MSDNの記述はきちんと読まれましたか?
 MSDNの記述どおり、URL指定でアクセス可能か調べるInternetCheckConnection()など
手法もあります。

 あと、似たような内容で悩んでいる方がいらっしゃったので紹介しておきます。
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200312/03120080.txt
 こちらは、InternetOpenURL()で解決されたようです。


返信引用
確変
 確変
(@確変)
ゲスト
結合: 13年前
投稿: 35
Topic starter  

自分の環境は光接続なので LAN でしょう。
しかし、作っているソフトは不特定多数のユーザー向けということもあるので、
InternetGetConnectedState() は諦めます。

InternetCheckConnection() をやってみました。

BOOL bOnline = InternetCheckConnection(_T( http://www.google.com),
FLAG_ICC_FORCE_CONNECTION, 0);
if (bOnline) MessageBox(_T(TRUE));
else MessageBox(_T(FALSE));

これで TRUE と FALSE が正しく帰ってきますが、接続していないとき、接続を促す「ダ
イアルアップ接続」ダイアログが出るのが邪魔なのと、3回に1回くらい非常に長く
(約1分)フリーズしたみたいになった後 FALSE が帰ってくるのが問題です。
一応これで進めることにします。

InternetOpenURL() はコードがややこしそうなのでトライしていませんが、URLを指定す
る点で、結果は InternetCheckConnection() と同じになると思います。

一応解決ということにします。
ご親切にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました