2011-02-08 52 views
0

哪個Windows API告訴我一個撥號連接處於連接或斷開狀態?哪個Windows API允許我以編程方式撥打撥號連接。 我想用C#.Net在Windows 7中開發個人應用程序。有人能幫助我嗎?用於撥打網絡連接的Windows API

回答

1

我相信RasDialDlg和相關的API可能是你在找什麼。不過,這比調用單個函數有點複雜。

1

首先檢查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,這是一個試圖提供訪問遠程訪問服務於Windows系統(RAS)組件到.NET平臺。這可能比自己實現功能更容易。

+0

如果您想使用DotRas來確定連接是否處於活動狀態,您只需檢查調用RasConnection.GetActiveConnections方法的結果。它包含當前活動的所有基於RAS的連接。 – 2011-08-04 15:52:08