C#自动拨号调用类

摘抄的,还没有测试

调用代码: 
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.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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
[DllImport("phone.dll")] private static extern IntPtr PhoneMakeCall(ref PhoneMakeCallInfo ppmci); /// /// Dials the specified phone number. /// /// Phone number to dial. public static void MakeCall(string PhoneNumber) { MakeCall(PhoneNumber, false); } /// /// Dials the specified phone number. /// /// Phone number to dial. /// Prompts the user before the call is placed. unsafe public static void MakeCall(string PhoneNumber, bool PromptBeforeCall) { IntPtr res; PhoneNumber += '\0'; char[] cPhoneNumber = PhoneNumber.ToCharArray(); fixed (char* pAddr = cPhoneNumber) { PhoneMakeCallInfo info = new PhoneMakeCallInfo(); info.cbSize = (IntPtr)Marshal.SizeOf(info); info.pszDestAddress = (IntPtr)pAddr; if (PromptBeforeCall) { info.dwFlags = (IntPtr)PMCF_PROMPTBEFORECALLING; } else { info.dwFlags = (IntPtr)PMCF_DEFAULT; } res = PhoneMakeCall(ref info); } } } /// /// Reads information from the Subscriber Identity Module (SIM) /// public class Sim { private static long SERVICE_PROVIDER = 0x00006F46; [StructLayout(LayoutKind.Sequential)] private struct SimRecord { public IntPtr cbSize; public IntPtr dwParams; public IntPtr dwRecordType; public IntPtr dwItemCount; public IntPtr dwSize; } [DllImport("sms.dll")] private static extern IntPtr SmsGetPhoneNumber(IntPtr psmsaAddress); [DllImport("cellcore.dll")] private static extern IntPtr SimInitialize(IntPtr dwFlags, IntPtr lpfnCallBack, IntPtr dwParam, out IntPtr lphSim); [DllImport("cellcore.dll")] private static extern IntPtr SimGetRecordInfo(IntPtr hSim, IntPtr dwAddress, ref SimRecord lpSimRecordInfo); [DllImport("cellcore.dll")] private static extern IntPtr SimReadRecord(IntPtr hSim, IntPtr dwAddress, IntPtr dwRecordType, IntPtr dwIndex, byte[] lpData, IntPtr dwBufferSize, ref IntPtr lpdwBytesRead); [DllImport("cellcore.dll")] private static extern IntPtr SimDeinitialize(IntPtr hSim); /// /// Gets the phone number from the SIM. /// /// PhoneAddress structure with phone number. unsafe public static PhoneAddress GetPhoneNumber() { PhoneAddress phoneaddr = new PhoneAddress(); Byte[] buffer = new Byte[516]; fixed (byte* pAddr = buffer) { IntPtr res = SmsGetPhoneNumber((IntPtr)pAddr); if (res != IntPtr.Zero) throw new Exception("Could not get phone number from SIM"); byte* pCurrent = pAddr; phoneaddr.AddressType = (AddressType)Marshal.ReadInt32((IntPtr)pCurrent); pCurrent += Marshal.SizeOf(phoneaddr.AddressType); phoneaddr.Address = Marshal.PtrToStringUni((IntPtr)pCurrent); } return phoneaddr; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值