JUST DO IT ~

          我只想當個程序員

          window c# 撥號 網絡相關的 api


          很管用的撥號類網上找到的.






          namespace ConsoleApplication1
          {
           
          /*
          ADSL自動撥號類,前提是在系統中已經有了一個寬帶撥號連接
          調用代碼:
          RASDisplay ras = new RASDisplay();
          ras.Disconnect();//斷線
          ras.Connect("adsl");//撥號 

           
          */

          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;
          }

          [StructLayout(LayoutKind.Sequential,CharSet
          =CharSet.Auto)]
          public struct RasStats
          {
              
          public int dwSize;
              
          public int dwBytesXmited;
              
          public int dwBytesRcved;
              
          public int dwFramesXmited;
              
          public int dwFramesRcved;
              
          public int dwCrcErr;
              
          public int dwTimeoutErr;
              
          public int dwAlignmentErr;
              
          public int dwHardwareOverrunErr;
              
          public int dwFramingErr;
              
          public int dwBufferOverrunErr;
              
          public int dwCompressionRatioIn;
              
          public int dwCompressionRatioOut;
              
          public int dwBps;
              
          public int dwConnectionDuration;
          }

          [StructLayout(LayoutKind.Sequential,CharSet
          =CharSet.Auto)]
          public struct RasEntryName 

              
          public int dwSize; 
              
          //[MarshalAs(UnmanagedType.ByValTStr,SizeConst=(int)RasFieldSizeConstants.RAS_MaxEntryName + 1)]
              public string szEntryName; 
              
          //#if WINVER5
              
          //  public int dwFlags;
              
          //  [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260+1)]
              
          //  public string szPhonebookPath;
              
          //#endif
          }
          public class RAS

          {


              [DllImport(
          "rasapi32.dll", EntryPoint = "RasEnumConnectionsA", SetLastError=true)]

              
          internal static extern int RasEnumConnections
                  (
                  
          ref RASCONN lprasconn, // buffer to receive connections data
                  ref int lpcb, // size in bytes of buffer
                  ref int lpcConnections // number of connections written to buffer
                  );


              [DllImport(
          "rasapi32.dll",CharSet=CharSet.Auto)]
              
          internal static extern uint RasGetConnectionStatistics(
                  IntPtr hRasConn,       
          // handle to the connection
                  [In,Out]RasStats lpStatistics  // buffer to receive statistics
                  );
              [DllImport(
          "rasapi32.dll",CharSet=CharSet.Auto)]
              
          public extern static uint RasHangUp(
                  IntPtr hrasconn  
          // handle to the RAS connection to hang up
                  );

              [DllImport(
          "rasapi32.dll",CharSet=CharSet.Auto)]
              
          public extern static uint RasEnumEntries (
                  
          string reserved,              // reserved, must be NULL
                  string lpszPhonebook,         // pointer to full path and
                  
          //  file name of phone-book file
                  [In,Out]RasEntryName[] lprasentryname, // buffer to receive
                  
          //  phone-book entries
                  ref int lpcb,                  // size in bytes of buffer
                  out int lpcEntries             // number of entries written
                  
          //  to buffer
                  );

              [DllImport(
          "wininet.dll",CharSet=CharSet.Auto)]
              
          public extern static int InternetDial(
                  IntPtr hwnd,
                  [In]
          string lpszConnectoid, 
                  
          uint dwFlags,
                  
          ref int lpdwConnection,
                  
          uint dwReserved
                  );

              
          public RAS()
              {

              }

                  
          }
          public enum DEL_CACHE_TYPE //要刪除的類型。
          {
              File,
          //表示internet臨時文件
              Cookie //表示Cookie
          };
          public class RASDisplay
          {
              [DllImport(
          "wininet.dll",CharSet=CharSet.Auto)]
              
          public static extern bool  DeleteUrlCacheEntry(
                  DEL_CACHE_TYPE type
                  );
              
          private string m_duration;
              
          private string m_ConnectionName;
              
          private string[] m_ConnectionNames;
              
          private double m_TX;
              
          private double m_RX;
              
          private bool m_connected;
              
          private IntPtr m_ConnectedRasHandle;

              RasStats status 
          = new RasStats();
              
              
              
          public RASDisplay()
              {
                  m_connected 
          = true;

                  RAS lpras 
          = new RAS();
                  RASCONN lprasConn 
          = new RASCONN();

                  lprasConn.dwSize 
          = Marshal.SizeOf(typeof(RASCONN));
                  lprasConn.hrasconn 
          = IntPtr.Zero;

                  
          int lpcb = 0;
                  
          int lpcConnections = 0;
                  
          int nRet = 0;
                  lpcb 
          = Marshal.SizeOf(typeof(RASCONN));


                  nRet 
          = RAS.RasEnumConnections(ref lprasConn, ref lpcb, ref  lpcConnections);


                  
          if(nRet != 0)

                  {
                      m_connected 
          = false;
                      
          return;

                  }

                  
          if(lpcConnections > 0)
                  {


                      
          //for (int i = 0; i < lpcConnections; i++)

                      
          //{
                      RasStats stats = new RasStats();

                      m_ConnectedRasHandle 
          = lprasConn.hrasconn;
                      RAS.RasGetConnectionStatistics(lprasConn.hrasconn, stats);


                      m_ConnectionName 
          = lprasConn.szEntryName;

                      
          int Hours = 0;
                      
          int Minutes = 0;
                      
          int Seconds = 0;

                      Hours 
          = ((stats.dwConnectionDuration /1000/3600);
                      Minutes 
          = ((stats.dwConnectionDuration /1000/60- (Hours * 60);
                      Seconds 
          = ((stats.dwConnectionDuration /1000)) - (Minutes * 60- (Hours * 3600);


                      m_duration 
          = Hours  +  " hours "  + Minutes + " minutes " + Seconds + " secs";
                      m_TX 
          = stats.dwBytesXmited;
                      m_RX 
          = stats.dwBytesRcved;


                      
          //}


                  }
                  
          else
                  {
                      m_connected 
          = false;
                  }


                  
          int lpNames = 1;
                  
          int entryNameSize = 0;
                  
          int lpSize = 0;
                  RasEntryName[] names 
          = null;

                  entryNameSize
          =Marshal.SizeOf(typeof(RasEntryName));
                  lpSize
          =lpNames*entryNameSize;

                  names
          =new RasEntryName[lpNames];
                  names[
          0].dwSize=entryNameSize;

                  
          uint retval = RAS.RasEnumEntries(null,null,names,ref lpSize,out lpNames);

                  
          //if we have more than one connection, we need to do it again
                  if(lpNames > 1)
                  {
                      names
          =new RasEntryName[lpNames];
                      
          for(int i=0;i<names.Length;i++)
                      {
                          names[i].dwSize
          =entryNameSize;
                      }

                      retval 
          = RAS.RasEnumEntries(null,null,names,ref lpSize,out lpNames);

                  }
                  m_ConnectionNames 
          = new string[names.Length];


                  
          if(lpNames>0)
                  {
                      
          for(int i=0;i<names.Length;i++)
                      {

                          m_ConnectionNames[i] 
          = names[i].szEntryName;

                      }
                  }
              }

              
          public string Duration
              {
                  
          get
                  {
                      
          return m_connected ? m_duration : "";
                  }
              }

              
          public string[] Connections
              {
                  
          get
                  {
                      
          return m_ConnectionNames;
                  }
              }

              
          public double BytesTransmitted
              {
                  
          get
                  {
                      
          return m_connected ? m_TX : 0;
                  }
              }
              
          public double BytesReceived
              {
                  
          get
                  {
                      
          return m_connected ? m_RX :  0;

                  }
              }
              
          public string ConnectionName
              {
                  
          get
                  {
                      
          return m_connected ? m_ConnectionName : "";
                  }
              }
              
          public bool IsConnected
              {
                  
          get
                  {
                      
          return m_connected;
                  }
              }

              
          public int Connect(string Connection)
              {
                  
          int temp = 0;
                  
          uint INTERNET_AUTO_DIAL_UNATTENDED = 2;
                  
          int retVal = RAS.InternetDial(IntPtr.Zero,Connection,INTERNET_AUTO_DIAL_UNATTENDED,ref temp,0);
                  
          return retVal;
              }
              
          public void Disconnect()
              {
                  RAS.RasHangUp(m_ConnectedRasHandle);
              }
          }





          }


          posted on 2008-06-25 23:20 小高 閱讀(1058) 評論(0)  編輯  收藏 所屬分類: DotNet

          導航

          <2008年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          常用鏈接

          留言簿(3)

          隨筆分類(352)

          收藏夾(19)

          關注的blog

          手冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 漳州市| 长岛县| 安平县| 涟水县| 大洼县| 库尔勒市| 中阳县| 新泰市| 腾冲县| 阳新县| 道孚县| 象州县| 天等县| 新兴县| 三穗县| 澎湖县| 巴林左旗| 罗源县| 吉林省| 元氏县| 芦山县| 四子王旗| 乌拉特后旗| 冀州市| 永川市| 郁南县| 闻喜县| 利川市| 红桥区| 龙门县| 繁峙县| 确山县| 米林县| 渑池县| 宕昌县| 抚松县| 四平市| 安溪县| 浏阳市| 桂平市| 柳州市|