用c#在XP中自动拔号

我也是在网上看到的,没什么可说的,直接看代码吧:
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 < m_ConnectionNames.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);
	}
}
使用方法:
RASDisplay ras = new RASDisplay();
ras.Disconnect();
int val = ras.Connect( "ADSL" );
"ADSL"名称不限,val如果返回0,说明已拔号成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值