بسم الله الرحمن الرحيم
سوف نتحدث عن كيف معرف الحالة لنت
يمد النظام وضائف كثير لذلك ولكن نختار أسهل هذه الوضائف وهي InternetGetConnectedStateEx
لكتابة هذه الوظيف في ال #C :
[DllImport("WinInet.dll", CharSet = CharSet.Auto)]
public static extern bool InternetGetConnectedStateEx(
ref int lpdwFlags,
[MarshalAs(UnmanagedType.LPTStr)]
System.Text.StringBuilder lpszConnectionName,
int dwNameLen,
int dwReserved
);البرمتير الأول lpdwFlags: وهو عبارة عن مؤشر تعيد الوضيفة به حالة النت وهو عبارة عن مجموعة من الثوابت نستطيع أن نجمعهم في Enum وهم:
[Flags]
public enum InternetConnectedState
{
/// <summary>
/// Local system has a valid connection to the Internet, but it might or might not be currently connected.
/// </summary>
INTERNET_CONNECTION_CONFIGURED = 0x40,
/// <summary>
/// Local system uses a local area network to connect to the Internet.
/// </summary>
INTERNET_CONNECTION_LAN = 0x02,
/// <summary>
/// Local system uses a modem to connect to the Internet.
/// </summary>
INTERNET_CONNECTION_MODEM = 0x01,
/// <summary>
/// No longer used.
/// </summary>
INTERNET_CONNECTION_MODEM_BUSY = 0x08,
/// <summary>
/// Local system is in offline mode.
/// </summary>
INTERNET_CONNECTION_OFFLINE = 0x20,
/// <summary>
/// Local system uses a proxy server to connect to the Internet.
/// </summary>
INTERNET_CONNECTION_PROXY = 0x04,
/// <summary>
/// Local system has RAS installed
/// </summary>
INTERNET_RAS_INSTALLED = 0x10,
}نزود الـ Enum بـ FlagsAttribute لنعلم الـ #C بأنه يمكنن أن نجمع أكثر من ثابت يمكن أن تكون حالة النت Lan و Proxy
البرمتير الثاني lpszConnectionName: وهو عبارة عن مؤشر لنص لتعيد الوظيفة اسم Connection وبما أننا نتعامل مع كود Unmanaged نخبر الـ #C بأن يتعامل معه كـ مؤشر لـ LPTStr وهذا النوع مبرمجين الـ ++C يعرفةنه جيداً أي أنه مؤشر لنص من النوع Unicode
البرمتير الثالث dwNameLen: وهو طول النص مقدر بالبيت
البرمتير الرابع dwReserved: محجوز غير قابل للإستخدام
ولنقوم بستخدام هذه الوضيفة نستطيع أن نكتب ما يلي :
private void button1_Click(object sender, EventArgs e)
{
int Flag = 0;
StringBuilder ConnectionName = new StringBuilder(255);
WinInetrnetNativeAPI.InternetGetConnectedStateEx(ref Flag, ConnectionName, 255, 0);
Connection_Name = ConnectionName.ToString();
InternetConnectedState State = (InternetConnectedState)Flag;
bool ConnectedViaLan = (State & InternetConnectedState.INTERNET_CONNECTION_LAN) == InternetConnectedState.INTERNET_CONNECTION_LAN;
bool ConnectedViaModem = (State & InternetConnectedState.INTERNET_CONNECTION_MODEM) == InternetConnectedState.INTERNET_CONNECTION_MODEM;
bool ConnectedViaProxy = (State & InternetConnectedState.INTERNET_CONNECTION_PROXY) == InternetConnectedState.INTERNET_CONNECTION_PROXY;
bool IsConnected = false;
if (ConnectedViaLan == true || ConnectedViaModem== true)
{
IsConnected = true;
}
MessageBox.Show(String.Format("Connection Name: {0}\n Connection State: {1}\n Via Lan: {2}\n Via Modem: {3}\n Via Proxy: {4}\n Is Connected: {5}",
ConnectionName,
State,
ConnectedViaLan,
ConnectedViaModem,
ConnectedViaProxy,
IsConnected));
}أو نستطيع أن نضع الكود في مؤقت ونختبر ما نريد
للإستزادة أضغط على الربط
مع المرفقات مثال كامل وبداخلة Class مفيد جداً نستطيع أن نستخدمه في برامجنا
لأي سوأل أن في الخدمة