首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# ADSL 撥號程式完整範例:RAS API 互操作與連線管理

     編輯:關於C語言

前置條件

系統已建立寬帶撥號連線項目。本範例封裝 RASDisplay 類別,提供連線、斷線、狀態查詢功能。

核心 P/Invoke 簽章


[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);

RASDisplay 主要功能

  • 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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved