2012-07-24 64 views

回答

1

我建議你使用一個線程來定期檢查連接的狀態。

這可以使用rasapi32.dll中的RasEnumConnections來完成。此調用返回活動連接列表,然後您可以迭代該列表來檢查您打開的連接是否在其中。

+0

感謝您的建議安德烈亞斯。 +1。任何其他可能的解決方案都是爲了創建一個線程嗎?這是更有效的像registerdevicenotification它通知窗口設備刪除?任何APIS都可以爲RASDIAL工作。 – 2vision2 2012-07-24 06:04:48

0

lpvNotifierRadDial函數允許您傳遞一個RasDialFunc1,它將接收有關連接生命週期的通知事件。 (RasGetConnectStatus也可用於輪詢)

+0

感謝您的回覆Alex。我正在使用Rasphone.exe進行撥號連接。所以從這個角度來看,我怎麼能做到這一點。 – 2vision2 2012-07-24 10:28:59

+0

哦,我以爲你的意思是你使用RASDIAL API而不是命令行 – 2012-07-24 10:30:02

+0

但仍然有辦法做到這一點?這是爲了監視連接並在用戶手動斷開連接後退出我的應用程序? – 2vision2 2012-07-24 10:41:56

1

正確的Win32 API用於接收有關RAS連接和斷開連接的基於事件的通知是RasConnectionNotification。

這裏有一個鏈接:http://msdn.microsoft.com/en-us/library/aa376726(VS.85).aspx

如果您正在使用CodePlex上的DotRas SDK的RasConnectionWatcher處理使用上述API這些通知。

using DotRas; 

RasConnectionWatcher watcher = new RasConnectionWatcher(); 
watcher.Connected += (sender, e) => 
    { 
     // Connected! 
    }; 
watcher.Disconnected += (sender, e) => 
    { 
     // Disconnected! 
    }; 

您還可以指定一個手柄從RASDIAL返回通過設置Handle屬性得到具體到處理事件。

watcher.Handle = handle; 
watcher.EnableRaisingEvents = true; 

下面是DotRas一個鏈接,如果你有興趣:http://dotras.codeplex.com

編輯:我只是想補充一點,如果你不指定一個句柄要麼DotRas或Win32 API的,你會接收來自所有連接的事件,斷開連接以及機器上添加/刪除的帶寬。