C#无窗体自动ADSL拨号代码-转载

于网上搜索的c#拨号代码总是会弹出拨号连接的界面,基本等于无用,现在给出一段代码,经过本人的调试,完全可以实现自动ADSL拨号,昨夜测试完成后,不敢独享。具体用途,各位自己决定吧
代码中使用了指针,因此,需要在编译的时候添加/unsafe编译选项

 1             [DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
2 privateexternstaticuint RasDial(IntPtr dialExtensions, IntPtr phoneBookPath, IntPtr rasDialParam, uint NotifierType, IntPtr notifier, ref IntPtr pRasConn);
3
4 ///<summary>
5 /// 无窗口adsl断网连接http://www.cnphp.info/csharp-auto-adsl-dial-source-code.html
6 ///</summary>
7 ///<param name="EntryName">adsl名称</param>
8 ///<param name="UserName">账号</param>
9 ///<param name="Password">密码</param>
10 ///<param name="RasConn"></param>
11 ///<returns></returns>
12 publicstaticunsafeuint Connect(string EntryName, string UserName, string Password, out IntPtr RasConn)
13 {
14 uint retVal;
15
16 RasConn = IntPtr.Zero;
17 byte[] bRASDIALPARAMS =newbyte[1464];
18 fixed (byte* pAddr = bRASDIALPARAMS)
19 {
20 byte* pCurrent = pAddr;
21 Marshal.WriteInt32((IntPtr)pCurrent, bRASDIALPARAMS.Length);
22 pCurrent +=4;
23 foreach (byte b in Encoding.Unicode.GetBytes(EntryName))
24 {
25 Marshal.WriteByte((IntPtr)pCurrent, b);
26 pCurrent++;
27 }
28 pCurrent = pAddr +0x192;//0x192 - offset for RASDIALPARAMS.UserName
29 foreach (byte b in Encoding.Unicode.GetBytes(UserName))
30 {
31 Marshal.WriteByte((IntPtr)pCurrent, b);
32 pCurrent++;
33 }
34 pCurrent = pAddr +0x394;//0x394 - offset for RASDIALPARAMS.Password
35 foreach (byte b in Encoding.Unicode.GetBytes(Password))
36 {
37 Marshal.WriteByte((IntPtr)pCurrent, b);
38 pCurrent++;
39 }
40 retVal = RasDial(IntPtr.Zero, IntPtr.Zero, (IntPtr)pAddr, 0, IntPtr.Zero, ref RasConn);
41 }
42 return retVal;
43 }


原文地址:http://www.cnphp.info/csharp-auto-adsl-dial-source-code.html

posted @ 2011-07-29 20:11  事理  阅读(350)  评论(0编辑  收藏  举报