4

Win32 で、実際にデータを転送せずに、特定のネットワーク インターフェイスの帯域幅をプログラムで決定する方法はありますか? 異なるタイプのインターフェイス (ダイヤルアップ、DSL、LAN など) を区別したいだけなので、帯域幅を実際に測定する必要はありません。

この問題の背景には、アプリケーションが帯域幅を大量に消費することがあり、ユーザーがダイヤルアップ モデムや GPRS モデムなどの低帯域幅インターフェイスでアプリケーションを実行しようとした場合に、警告を表示したいと考えています。

他の関連する質問をいくつか見てきましたが、可能であればスループットの測定を避けたいと思います。特に GPRS モデムには使用上限がある場合があり、ユーザーの許可を食いつぶしたくありません。別の方法で接続不良を検出し、実際にはデータをまったく送信しないようにしたいと考えています。

私は Win32/C++ の回答に最も興味がありますが、どんなアイデアでも喜んで受け取ります。

4

3 に答える 3

6

WMI クエリを使用することもできます。もちろん、Win32 関数呼び出しもありますが、このクエリは次のとおりです。

Select * from Win32_PerfFormattedData_Tcpip_NetworkInterface
于 2009-05-11T18:27:11.027 に答える
4

InternetGetConnectedStateを使用して、接続の種類 (LAN/Modem/etc) を判断できます。これにより、帯域幅転送なしである程度まともな (非モデム) 接続があるかどうかがわかります。

残念ながら、データを接続して転送しない限り、それ以上のことはできません。システムが LAN 接続の外で帯域幅の制限を知る方法はありません。つまり、LAN 上のゲートウェイに直接接続できますが、外の世界への接続がうまくいかない場合があります。ただし、コンピューターに関する限り、それはフルスピードのLAN接続上にあります...

于 2009-05-11T18:26:29.327 に答える
3

なぜユーザーに尋ねないのですか?彼は知っているはずです。

アプリはネットワーク アドレスの情報をキャッシュし、ネットワーク アドレスが変更された場合にのみ再度要求することができます。

于 2009-05-11T18:22:35.697 に答える