C#自动拨号调用类

转载 2007年10月10日 10:24:00

摘抄的,还没有测试

调用代码: 
RASDisplay   ras   
=   new   RASDisplay(); 
        ras.Disconnect();
//断线 
ras.Connect("adsl");//拨号,adsl是宽带连接的名称 


//ADSL自动断拨号类   
//===================================== 
using   System; 
using   System.Runtime.InteropServices; 
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); 
        }
 
}
  

C# 连接自动拨号与断开分析

源网址:http://blog.csdn.net/hinyunsin/article/details/4033753 C#的自动拨号和断开当前连接的代码网上很多,可是没有一个是真正自动的,就算我...
  • zky0901
  • zky0901
  • 2015年10月24日 16:10
  • 1496

Android开发之实现拨号功能

Android开发之实现拨号功能 在我们刚开始接触Android入门开发时会涉及到如何调用系统拨号功能实现拨号功能,在这里,我们实现调用系统拨号并且把用户输入的号码传递到系统拨号盘,这样也是为了可以...
  • jxnk25
  • jxnk25
  • 2015年10月08日 08:46
  • 1253

java实现动态切换上网IP (ADSL拨号上网)

爬虫访问中,如何解决网站限制IP的问题? 开发了一个爬虫,布置在自己的服务器上,请求某网站的查询功能,然后抓取查询结果,结果访问才一会儿,就被提示封IP了。有什么好的解决方法吗? ...
  • xiaomin1991222
  • xiaomin1991222
  • 2016年03月10日 16:05
  • 1655

C#自动拨号类源代码

using System; using System.Collections.Generic; using System.Text; using System.Timers; using System...
  • pridescc
  • pridescc
  • 2011年07月05日 11:10
  • 2584

C#实现ADSL自动拨号

在网络编程中,有时候会需要重新拨号建立网络连接(如Ad点击软件通过重新拨号形成有效点击) ,下面介绍两种程序中拨号的方法. 1、最简单的方法:使用RasDial命令     RasDial是Win...
  • Feishiyi
  • Feishiyi
  • 2011年11月27日 16:45
  • 447

C# 实现自动ADSL拨号(基于bat)

前言由于工作原因,需要使电脑长时间保持宽带连接状态,并且有动态拨号更换ip的需求,在网上查阅资料许久,首先找到了这篇博客: 使用C#实现ADSL自动拨号但是本人在win8 64位的系统上并未成功,后...
  • qq_26712977
  • qq_26712977
  • 2017年10月18日 16:41
  • 68

使用C#实现ADSL自动拨号

在网络编程中,有时候会需要重新拨号建立网络连接(如Ad点击软件通过重新拨号形成有效点击) ,下面介绍两种程序中拨号的方法. 1、最简单的方法:使用RasDial命令 RasDial是Win...
  • PanVSoft
  • PanVSoft
  • 2015年03月29日 22:41
  • 336

c# 自动拨号

  • 2011年12月26日 17:51
  • 22KB
  • 下载

C# 自动拨号 ADSL 整理了一下,VS2008编译通过

  • 2009年09月07日 22:49
  • 42KB
  • 下载

C# 获取拨号连接,自动拨号,源码

  • 2009年10月07日 17:54
  • 41KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#自动拨号调用类
举报原因:
原因补充:

(最多只允许输入30个字)