3

Compact Frameworkアプリがインターネットに接続されているかどうかを、チェックインする必要があります。

周りを見回すとInternetGetConnectedState方法が見つかりましたが、私の場合、インターネットに接続しているかどうかを確認するたびに、オフラインのときでもtrueが返されます。

コードは次のとおりです。

[DllImport("wininet.dll", CharSet = CharSet.Auto)]
private extern static bool InternetGetConnectedState(ref InternetConnectionState_e lpdwFlags, int dwReserved);

[Flags]enum InternetConnectionState_e : int
{
    INTERNET_CONNECTION_MODEM = 0x01,
    INTERNET_CONNECTION_LAN = 0x02,
    INTERNET_CONNECTION_PROXY = 0x04,
    INTERNET_RAS_INSTALLED = 0x10,
    INTERNET_CONNECTION_OFFLINE = 0x20,
    INTERNET_CONNECTION_CONFIGURED = 0x40
}

public Form1()
{
    InitializeComponent();
    verify();
}

private void verify()
{
    // In function for checking internet
    InternetConnectionState_e flags = 0;
    bool isConnected = InternetGetConnectedState(ref flags, 0);
    textBox1.Text = "Con: " + isConnected.ToString();
    textBox1.Text += "\r\nDescr: " + flags.ToString();
}

private void button1_Click(object sender, EventArgs e)
{
    verify();
}

private void button2_Click(object sender, EventArgs e)
{
    this.Close();
}

私は何か間違ったことをしていますか?

4

1 に答える 1

4

P/Invoke internetgetconnectedstate署名が少しずれているようです。

int上記のリンクからコピーすると、シグネチャは最初のパラメータとしてan を探すように見えます:

[DllImport("wininet.dll", SetLastError=true)]
extern static bool InternetGetConnectedState( out int lpdwFlags Description, int dwReserved );

[Flags]
enum ConnectionStates
{
    Modem = 0x1,
    LAN = 0x2,
    Proxy = 0x4,
    RasInstalled = 0x10,
    Offline = 0x20,
    Configured = 0x40,
}

コードの使用例は非常に単純に見えます。

using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication2
{
  internal class Program
  {
   [DllImport("wininet.dll", SetLastError = true)]
   private static extern bool InternetGetConnectedState(out int lpdwFlags, int dwReserved);

   private static void Main(string[] args)
   {
    int flags;
    bool isConnected = InternetGetConnectedState(out flags, 0);
    Console.WriteLine(string.Format("Is connected :{0} Flags:{1}", isConnected, flags));
   }
  }
}

どのようなエラーが発生していますか? InternetGetConnectedStateメソッドをいつでもtry...catchブロックでラップできます。

   private static void Main(string[] args)
   {
    int flags;
    bool isConnected = false;
    try
    {
      isConnected = InternetGetConnectedState(out flags, 0);
    } catch (Exception err)
    {
      Console.WriteLine(err.Message);
    }
    Console.WriteLine(string.Format("Is connected :{0} Flags:{1}", isConnected, flags));
   }
  }

それが役立つことを願っています。

更新結果に基づいてflags = 18:

flagsとして定義されているintため、18 は 10 進数表現です。

バイナリでは、これは になり0001 0010、 にマップされLAN (0x2) | RasInstalled (0x10)ます。

したがって、あなたはローカル エリア ネットワーク経由で接続していると思いますが、LAN がインターネットにアクセスできるとは限りません。それをテストするには、既知の適切なサイトを参照してみる必要があります。

RASよくわかりません。リモート アクセス サービス?

注意: 充電器にクレードル/ドッキングされたデバイスも として登録される可能性がConnectedあります。

于 2013-01-03T14:13:44.680 に答える