[VB.NET]请问高手如何用VB2005调用系统默认连接实现自动拨号,谢谢!

来源:互联网 发布:男士钱包 知乎 编辑:程序博客网 时间:2024/04/30 16:28
VB.NET源码-156个实用实例哦……<script type="text/javascript"><!--google_ad_client = "pub-8333940862668978";/* 728x90, 创建于 08-11-30 */google_ad_slot = "4485230109";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
请问高手如何用VB2005调用系统默认连接实现自动拨号,谢谢!
请问高手,如何用VB2005调用系统默认连接,进行ADSL的虚拟拨号和断线呢?谢谢啦!
__________________________________________________________________________
我也想知道
__________________________________________________________________________
Using comPort As SerialPort = My.Computer.Ports.OpenSerialPort( COM1 , 2400)
comPort.DtrEnable = True
comPort.Write( ATDT 206-555-1000 & vbCrLf)

All data transfer code goes here.

End Using
__________________________________________________________________________
你那是猫的打开方式喔
__________________________________________________________________________
不会VB.net ,不过这里有一个C#的类,也许对你有帮助(试试将拨号类用C#编译成一个Dll后用vb.net调用,类很复杂,但调用很简单)。
=======调用代码:======
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[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[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);
}
}
__________________________________________________________________________
Private cc As Int32 = 0
Public Declare Function RasDial Lib RasApi32.DLL Alias RasDialA (ByVal lpRasDialExtensions As String, _
ByVal lpszPhonebook As String, ByRef lprasdialparams As _RASDIALPARAMS, ByVal dwNotifierType As Int32, _
ByVal lpvNotifier As Int32, ByRef lphRasConn As Int32) As Int32
Public Declare Function InternetHangUp Lib wininet.dll (ByVal dwConnection As Int32, ByVal dwReserved As Int32) As Int32
Private Declare Sub CopyMemory Lib kernel32 Alias RtlMoveMemory (ByVal lpvDest() As Byte, ByVal lpvSource() As Byte, ByVal cbCopy As Integer)

Public Structure _RASDIALPARAMS
Public dwSize As Int32
_
Public szEntryName() As Byte
_
Public szPhoneNumber() As Byte
_
Public szCallbackNumber() As Byte
_
Public szUserName() As Byte
_
Public szPassword() As Byte
_
Public szDomain() As Byte
Public dwSubEntry As Int32
Public dwCallbackId As Int32
End Structure
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim lp As New _RASDIALPARAMS
With lp
ReDim .szEntryName(256)
ReDim .szPhoneNumber(128)
ReDim .szCallbackNumber(128)
ReDim .szUserName(256)
ReDim .szPassword(256)
ReDim .szDomain(15)
Dim bSrc(100) As Byte
bSrc = System.Text.Encoding.ASCII.GetBytes( tz ) 用户名
Dim cbCopy As Integer = tz .Length()
CopyMemory(.szUserName, bSrc, cbCopy)

bSrc = System.Text.Encoding.ASCII.GetBytes( tztztz ) 密码
cbCopy = tztztz .Length()
CopyMemory(.szPassword, bSrc, cbCopy)

bSrc = System.Text.Encoding.ASCII.GetBytes( dsf ) 你的连接名称
cbCopy = dsf .Length()
CopyMemory(.szEntryName, bSrc, cbCopy)
End With
lp.dwSize = Marshal.SizeOf(lp)
Dim aa As Integer

aa = RasDial(vbNullString, vbNullString, lp, 0, 0, cc)
MessageBox.Show(aa)
aa = InternetDial(Me.Handle, dsf , &H4000, cc, 0)

End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
InternetHangUp(cc, 0)
End Sub
__________________________________________________________________________
一年之前问的问题,一年之后又遇到了,现在已经解决了,用了比较简单的方法,写了两个批处理,再调批处理即可,这两个批处理的写法网上很容易查到。
__________________________________________________________________________
上边的几个方法也挺好,先收藏了,回头再研究研究这代码~
__________________________________________________________________________