WinInet APIは次の関数を実装します。
BOOL InternetGetConnectedState(
_Out_ LPDWORD lpdwFlags,
_In_ DWORD dwReserved
);
特定の API 呼び出しの詳細については、こちらを参照してください。
編集:
テストに使用できる小さなコード サンプルを提供しました。
内部では、My.Computer.Network.IsAvailable
P/Invokesが真/偽のInternetGetConnectedState
値を返し、フラグを破棄することに注意してください。WinNt 以降では、ネットワーク インターフェイスを介して列挙し、最初に接続されたインターフェイスに対して true を返します。
using System;
namespace InternetGetConnectedState
{
[Flags]
enum InternetConnectionFlags : uint
{
// Flags for InternetGetConnectedState and Ex
Modem = 0x01,
Lan = 0x02,
Proxy = 0x04,
ModemBusy = 0x08, /* no longer used */
RasInstalled = 0x10,
Offline = 0x20,
Configured = 0x40
}
class Program
{
[System.Runtime.InteropServices.DllImport("wininet.dll", SetLastError = true)]
static extern bool InternetGetConnectedState(out InternetConnectionFlags flags, uint dwReserved);
static void Main(string[] args)
{
InternetConnectionFlags flags;
bool connectedState = InternetGetConnectedState(out flags, 0)
// TODO: Check Flags
}
}
}
編集 2:
ILSpy ダンプをさらに確認した後、NT より前の WindowsでMy.Computer.Network.IsAvailable
P/ Invokes を実行します。InternetGetConnectedState
WinNt 以降では、ネットワーク インターフェイスを介して列挙し、最初に接続されたインターフェイスに対して true を返します。だから、どちらか
My.Computer.Network.IsAvailable 'vb.net
また
System.Net.NetworkInformation.GetIsNetworkAvailable(); // C#
実行可能なソリューションです。
おそらく、自動更新を無効にするオプションは、エンド ユーザーの煩わしさを回避するための別の可能な解決策です。