【问题标题】:Windows API for dialing a network connection用于拨号网络连接的 Windows API
【发布时间】:2011-02-08 05:39:43
【问题描述】:

哪个 Windows API 告诉我拨号连接处于连接或断开状态?哪个 Windows API 允许我以编程方式拨打拨号连接。 我想使用 C#.Net 在 Windows 7 中开发一个供我个人使用的应用程序。有人可以帮我吗?

【问题讨论】:

    标签: windows winapi networking windows-7 dial-up


    【解决方案1】:

    我相信RasDialDlg 和相关的 API 可能是您正在寻找的。不过,这比仅调用单个函数要复杂一些。

    【讨论】:

      【解决方案2】:

      首先查看 WinINet 的 MSDN 文档,特别是标题为 Establishing a Dial-Up Connection to the Internet 的部分。

      要确定是否存在活动的拨号连接,请使用 wininet.dll 中提供的InternetGetConnectedState function

      // possible values returned in lpdwFlags parameter
      const int INTERNET_CONNECTION_CONFIGURED = 0x40;
      const int INTERNET_CONNECTION_LAN = 0x02;
      const int INTERNET_CONNECTION_MODEM = 0x01;
      const int INTERNET_CONNECTION_OFFLINE = 0x20;
      const int INTERNET_CONNECTION_PROXY = 0x04;
      const int INTERNET_RAS_INSTALLED = 0x10;
      
      [DllImport("wininet.dll", SetLastError=true, CharSet=CharSet.Auto)]
      static extern bool InternetGetConnectedState(out int lpdwFlags, int dwReserved);
      

      要拨打网络连接,您可以使用InternetDial function

      // possible values for dwFlags parameter
      const int INTERNET_AUTODIAL_FORCE_ONLINE = 0x1;
      const int INTERNET_AUTODIAL_FORCE_UNATTENDED = 0x2;
      const int INTERNET_DIAL_FORCE_PROMPT = 0x2000;
      const int INTERNET_DIAL_UNATTENDED = 0x8000;
      const int INTERNET_DIAL_SHOW_OFFLINE = 0x4000;
      
      // possible return values
      const int ERROR_SUCCESS = 0x0;
      const int ERROR_INVALID_PARAMETER = 0x57;
      const int ERROR_NO_CONNECTION = 0x29C;
      const int ERROR_USER_DISCONNECTION = 0x277;
      
      [DllImport("wininet.dll", SetLastError=true, CharSet=CharSet.Auto)]
      static extern int InternetDial(IntPtr hWndParent, string lpszConnected,
                                     int dwFlags, ref int lpdwConnection,
                                     int dwReserved);
      

      或者,您可以探索DotRas project,这是一种尝试向 .NET 平台提供对 Windows 中远程访问服务 (RAS) 组件的访问。这可能比自己实现功能更容易。

      【讨论】:

      • 如果您想使用 DotRas 来确定连接是否处于活动状态,您只需检查调用 RasConnection.GetActiveConnections 方法的结果。它包含所有当前处于活动状态的基于 RAS 的连接。
      猜你喜欢
      • 1970-01-01
      • 2011-04-19
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      相关资源
      最近更新 更多