鉴于网上搜索的c#拨号代码总是会弹出拨号连接的界面,基本等于无用,现在给出一段代码,经过本人的调试,完全可以实现自动ADSL拨号,昨夜测试完成后,不敢独享。具体用途,各位自己决定吧
public uint Connect(string EntryName, string UserName, string Password, out IntPtr RasConn)
{
uint retVal;
uint r=0;
RasConn=IntPtr.Zero;
byte[] bRASDIALPARAMS =new byte[1464];
fixed (byte* pAddr = bRASDIALPARAMS)
{
byte* pCurrent = pAddr;
Marshal.WriteInt32((IntPtr)pCurrent, bRASDIALPARAMS.Length);
pCurrent += 4;
foreach (byte b in Encoding.Unicode.GetBytes(EntryName))
{
Marshal.WriteByte((IntPtr)pCurrent, b);
pCurrent++;
}
pCurrent = pAddr + 0x192;//0x192 - offset for RASDIALPARAMS.UserName
foreach (byte b in Encoding.Unicode.GetBytes(UserName))
{
Marshal.WriteByte((IntPtr)pCurrent, b);
pCurrent++;
}
pCurrent = pAddr + 0x394;//0x394 - offset for RASDIALPARAMS.Password
foreach (byte b in Encoding.Unicode.GetBytes(Password))
{
Marshal.WriteByte((IntPtr)pCurrent, b);
pCurrent++;
}
retVal = RAS.RasDial(IntPtr.Zero, IntPtr.Zero, (IntPtr)pAddr, 0, IntPtr.Zero, ref RasConn);
}
return retVal;
}
代码中使用了指针,因此,需要在编译的时候添加/unsafe编译选项,RasDial可以在rasapi32.dll中找到,需要做一下封送和接口定义
[DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
public extern static uint RasDial(
IntPtr dialExtensions,
IntPtr phoneBookPath,
IntPtr rasDialParam,
uint NotifierType,
IntPtr notifier,
ref IntPtr pRasConn
);