用C#写的ADSL拨号程序的代码示例

<!--StartFragment-->ADSL自动拨号类,前提是在系统中已经有了一个宽带拨号连接
调用代码:
RASDisplay ras = new RASDisplay();
ras.Disconnect();//断线
ras.Connect("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("Ra<a href="http://dev.21tx.com/corp/sap/" target="_blank">SAP</a>i32.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); 
    } 
}

(0)

相关推荐

  • C# 实现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

  • 用C#写的ADSL拨号程序的代码示例

    <!--StartFragment-->ADSL自动拨号类,前提是在系统中已经有了一个宽带拨号连接 调用代码: RASDisplay ras = new RASDisplay(); ras.Disconnect();//断线 ras.Connect("adsl");//拨号 复制代码 代码如下: using System;  using System.Runtime.InteropServices;  public struct RASCONN  {      public

  • 使用Python的Twisted框架编写非阻塞程序的代码示例

    先来看一段代码: # ~*~ Twisted - A Python tale ~*~ from time import sleep # Hello, I'm a developer and I mainly setup Wordpress. def install_wordpress(customer): # Our hosting company Threads Ltd. is bad. I start installation and... print "Start installation

  • c#程序删除自身代码示例分享

    在.NET程序中,因为运行中的程序是受系统保护的,不能自己删除自身的,所以自删除的思路: 在关闭本程序之前启动新的进程打开另一个程序,调用这个程序来删除原程序.然后再完成外部进程的销毁. 方法一:程序中打开新的进程,删掉程序后,再销毁进程本身 流程:首先生成一个BAT文件,然后让BAT执行删除动作,就是:1.生成删除的BAT2.运行BAT3.快速退出4.BAT开始删除EXE5.BAT删除BAT 复制代码 代码如下: private static void DeleteItself(){strin

  • Python写的英文字符大小写转换代码示例

    几行代码的小工具,用于进行如下转换 TRANSACTIONS ON CLOUD COMPUTING => Transactions On Cloud Computing 复制代码 代码如下: orig = 'TRANSACTIONS ON CLOUD COMPUTING' splited = orig.split(' ') handled = '' for word in splited:     word = word[0] +  word[1:].lower()     handled +=

  • 用vbs实现的利用ADSL拨号变ip刷投票的代码

    以前写过一个利用ADSL拨号变ip刷流量的vbs,只要把刷新的页面稍微改一下(添加个自动提交的js)就是了,可是怎么找都找不到了,没法重新写. 还有种办法就是vbs直接提交,可是写了半天,怎么也没运行起,以后改好了在贴出来. 写的时候遇到了点问题,就是利用网页的js提交的时候,会跳转跳显示投票成果的页面,会弹出个投票成功的对话框,这会影响下面的打开网页.又没法屏蔽,所以采用了个折衷办法,每次结束浏览器进程,在刷后面的页面. 复制代码 代码如下: Const ForAppending = 8 Co

  • shell实现自动adsl拨号并检测连接状况脚本分享

    今天公司同事要我整个adsl自动重拨的shell,并检测是否连上了,这样才能保证内部测试服务器不掉网,好吧,下面我把脚本发出来. 系统:centos 5.x 脚本1: 复制代码 代码如下: cat /root/soft_shell/auto_adsl_1.sh #!/bin/bash gateway=`ifconfig ppp0 |grep P-t-P| cut -f 3 -d ":"|cut -f 1 -d " "` inter=`ifconfig |grep p

  • 用PHP和Shell写Hadoop的MapReduce程序

    使得任何支持标准IO (stdin, stdout)的可执行程序都能成为hadoop的mapper或者 reducer.例如: 复制代码 代码如下: hadoop jar hadoop-streaming.jar -input SOME_INPUT_DIR_OR_FILE -output SOME_OUTPUT_DIR -mapper /bin/cat -reducer /usr/bin/wc 在这个例子里,就使用了Unix/Linux自带的cat和wc工具来作为mapper / reducer

  • ADSL拨号中出现的错误代码问答集

    笔者是中国网通公司的一名宽带系统维护员,对ADSL的各类障碍接触较多,对ADSL拨号中出现的错误代码通过查找资料整理如下: Error 602 The port is already open 问题:拨号网络网络由于设备安装错误或正在使用,不能进行连接 原因:RasPPPoE没有完全和正确的安装 解决:卸载干净任何PPPoE软件,重新安装 Error 605 Cannot set port information 问题:拨号网络网络由于设备安装错误不能设定使用端口 原因:RasPPPoE没有完全

  • 手把手教你写一个微信小程序(推荐)

    需求 小程序语音识别,全景图片观看,登录授权,获取个人基本信息 一:基础框架 官方开发文档:https://developers.weixin.qq.com/miniprogram/dev/ (其实官方文档写的很清楚了) 1.跟着官方文档一步一步来,新建一个小程序项目就好 2.然后呢,毕竟默认的只是基本骨架,肌肉线条还是要自己填的 app.json 是当前小程序的全局配置 小程序的所有页面路径.界面表现.网络超时时间.底部 tab 需求一:底部tab,我们要像原生APP那样要有是三个常驻的按钮,

  • 用python写一个定时提醒程序的实现代码

    身体是革命的本钱,身体健康了我们才有更多精力做自己想做的事情,追求女神,追求梦想.然而程序员是一个苦比的职业,大部分时间都对着电脑,我现在颈椎就不好了,有时候眼睛还疼,我还没20阿,伤心...于是乎写了一个小程序,指定时间会打开浏览器播放一段音乐,提醒我们休息一会儿,防止我们猝死,说多了都是泪. 较基础,适合python新手及对python感兴趣的同学阅读. 我们来理一遍这个程序,大概功能是:我们设置一个时间,时间到了以后会打开浏览器播放一段音频. 1.等待 2.打开浏览器,播放音频. 3.重复

随机推荐

其他