系統已建立寬帶撥號連線項目。本範例封裝 RASDisplay 類別,提供連線、斷線、狀態查詢功能。
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct RASCONN
{
public int dwSize;
public IntPtr hrasconn;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)] public string szEntryName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)] public string szDeviceType;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)] public string szDeviceName;
}
[DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
internal static extern int RasEnumConnections(ref RASCONN lprasconn, ref int lpcb, ref int lpcConnections);
[DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
internal static extern uint RasGetConnectionStatistics(IntPtr hRasConn, [In, Out] RasStats lpStatistics);
[DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
public extern static uint RasHangUp(IntPtr hrasconn);
[DllImport("wininet.dll", CharSet = CharSet.Auto)]
public extern static int InternetDial(IntPtr hwnd, [In] string lpszConnectoid, uint dwFlags, ref int lpdwConnection, uint dwReserved);
Connect(string entryName):呼叫 InternetDial 撥號,INTERNET_AUTO_DIAL_UNATTENDED = 2 無人值守模式。Disconnect():呼叫 RasHangUp 掛斷。RasEnumConnections)、列舉電話簿項目(RasEnumEntries),填充 Connections、ConnectionName、Duration、BytesTransmitted/Received 屬性。IsConnected 判斷是否有作用中連線。
var ras = new RASDisplay();
ras.Disconnect(); // 先斷開現有
ras.Connect("adsl"); // 撥號項目名稱
完整代碼包含 RasStats、RasEntryName 結構與快取清除 DeleteUrlCacheEntry。注意:現代 Windows 版本可能需管理員權限或不同 API。