?? 130.htm
字號:
<p>RAS API上的其他Function </p>
<p></p>
<p></p>
<p>取得目前連接信息</p>
<p> Function GetAllConnects(ConnEntry() as RASCONN) As Long</p>
<p> 傳回值:總共連接數</p>
<p> 使用方式 :</p>
<p> Dim Conn() AS RASCONN</p>
<p> Dim icnt as Long</p>
<p> icnt = GetAllConnects(Conn())</p>
<p></p>
<p></p>
<p>取得所有撥號網絡Entry的信息(不管有沒有連接)</p>
<p> Function GetRasNameEntries(Entry() As RASENTRYNAME, _</p>
<p> Optional PhonePath As String) As Long</p>
<p>傳回值:總共Entry數</p>
<p> 使用方式 :</p>
<p> Dim Conn() AS RASENTRYNAME</p>
<p> Dim icnt as Long</p>
<p> icnt = GetRasNameEntries(Conn())</p>
<p></p>
<p>呼叫修改某一個連接Entry 的Window</p>
<p> Sub EditEntry(ByVal EntryName As String, _</p>
<p> Optional ByVal PhonePath As String)</p>
<p>於撥號網絡中新增一個Entry</p>
<p> Sub CreateEntry(Optional ByVal PhonePath As String)</p>
<p>自動撥接</p>
<p> Function DialUp(ByVal EntryName As String, ByVal UserN As String, _</p>
<p> ByVal Pwd As String, Optional ByVal PhonePath As String) As Long</p>
<p>取消撥接</p>
<p> Function HangUp(ByVal hconn As Long) As Boolean</p>
<p> hconn的值來自於</p>
<p> 1.DialUp()的傳回值</p>
<p> 2.GetAllConnects() RASCONN結構叁數中的hRasConn值</p>
<p></p>
<p>取得連接狀態</p>
<p> Function GetConnectStatus(ByVal hocnn As Long) As Long</p>
<p> hconn的值來自於</p>
<p> 1.DialUp()的傳回值</p>
<p> 2.GetAllConnects() RASCONN結構叁數中的hRasConn值</p>
<p></p>
<p></p>
<p>注釋:Below is in rasapi.bas</p>
<p>Public Const RAS_MaxEntryName = 256</p>
<p>Public Const RAS_MaxDeviceName = 128</p>
<p>Public Const RAS_MaxDeviceType = 16</p>
<p>Public Const RAS_MaxPhoneNumber = 128</p>
<p>Public Const RAS_MaxCallbackNumber = 128</p>
<p>Public Const UNLEN = 256</p>
<p>Public Const PWLEN = 256</p>
<p>Public Const DNLEN = 15</p>
<p>Public Const ERROR_INVALID_HANDLE = 6</p>
<p></p>
<p>Type RASCONN</p>
<p> dwSize As Long 注釋:412</p>
<p> hRasConn As Long</p>
<p> szEntryName(RAS_MaxEntryName) As Byte</p>
<p> szDeviceType(RAS_MaxDeviceType) As Byte</p>
<p> szDeviceName(RAS_MaxDeviceName) As Byte</p>
<p>End Type</p>
<p></p>
<p>Type RASENTRYNAME</p>
<p> dwSize As Long 注釋:264</p>
<p> szEntryName(RAS_MaxEntryName) As Byte</p>
<p>End Type</p>
<p></p>
<p>Type RASDIALPARAMS</p>
<p> dwSize As Long 注釋:1052</p>
<p> szEntryName(RAS_MaxEntryName) As Byte</p>
<p> szPhoneNumber(RAS_MaxPhoneNumber) As Byte</p>
<p> szCallbackNumber(RAS_MaxCallbackNumber) As Byte</p>
<p> szUserName(UNLEN) As Byte</p>
<p> szPassword(PWLEN) As Byte</p>
<p> szDomain(DNLEN) As Byte</p>
<p>End Type</p>
<p></p>
<p>Type RASCONNSTATUS</p>
<p> dwSize As Long 注釋:144</p>
<p> RasConnState As Long</p>
<p> dwError As Long</p>
<p> szDeviceType(RAS_MaxDeviceType) As Byte</p>
<p> szDeviceName(RAS_MaxDeviceName) As Byte</p>
<p>End Type</p>
<p></p>
<p>Declare Function RasDial Lib "rasapi32" _</p>
<p> Alias "RasDialA" (DialExt As Long, ByVal lpPhoneBook As String, _</p>
<p> RasDialParam As RASDIALPARAMS, ByVal NotifyType As Long, _</p>
<p> ByVal Notifter As Long, hRasConn As Long) As Long</p>
<p>Declare Function RasCreatePhonebookEntry Lib "rasapi32" _</p>
<p> Alias "RasCreatePhonebookEntryA" (ByVal hWnd As Long, ByVal lpPhoneBook As String) As Long</p>
<p>Declare Function RasEditPhonebookEntry Lib "rasapi32" _</p>
<p> Alias "RasEditPhonebookEntryA" (ByVal hWnd As Long, ByVal lpPhoneBook As String, _</p>
<p> ByVal lpEntryName As String) As Long</p>
<p>Declare Function RasGetErrorString Lib "rasapi32" _</p>
<p> Alias "RasGetErrorStringA" (ByVal ErrValue As Long, ByVal lpErrStr As String, _</p>
<p> ByVal cSize As Long) As Long</p>
<p>Declare Function RasEnumEntries& Lib "rasapi32" _</p>
<p> Alias "RasEnumEntriesA" (ByVal res As String, ByVal lpszPhonebook As String, _</p>
<p> lpRasEntryBuffer As Any, lpcb As Long, lpcEntries As Long)</p>
<p>Declare Function RasEnumConnections Lib "rasapi32" Alias _</p>
<p> "RasEnumConnectionsA" (lprasconn As Any, _</p>
<p> lpcb As Long, lpConnect As Long) As Long</p>
<p>Declare Function RasHangUp Lib "rasapi32" Alias _</p>
<p> "RasHangUpA" (ByVal hRasConn As Long) As Long</p>
<p>Declare Function RasGetConnectStatus Lib "rasapi32" Alias _</p>
<p> "RasGetConnectStatusA" (ByVal hRasConn As Long, _</p>
<p> lprasconnstatus As RASCONNSTATUS) As Long</p>
<p>Declare Function RasGetEntryDialParams Lib "rasapi32" _</p>
<p> Alias "RasGetEntryDialParamsA" (ByVal lpszPhonebook As String, _</p>
<p> lpRasDialParams As RASDIALPARAMS, _</p>
<p> lpfPassword As Byte) As Long</p>
<p></p>
<p>Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)</p>
<p>Enum RasConnState</p>
<p> RASCS_OpenPort = 0</p>
<p> RASCS_PortOpened 注釋:1</p>
<p> RASCS_ConnectDevice 注釋:2</p>
<p> RASCS_DeviceConnected 注釋:3</p>
<p> RASCS_AllDevicesConnected 注釋:4</p>
<p> RASCS_Authenticate 注釋:5</p>
<p> RASCS_AuthNotify 注釋:6</p>
<p> RASCS_AuthRetry</p>
<p> RASCS_AuthCallback</p>
<p> RASCS_AuthChangePassword</p>
<p> RASCS_AuthProject</p>
<p> RASCS_AuthLinkSpeed</p>
<p> RASCS_AuthAck</p>
<p> RASCS_ReAuthenticate</p>
<p> RASCS_Authenticated</p>
<p> RASCS_PrepareForCallback</p>
<p> RASCS_WaitForModemReset</p>
<p> RASCS_WaitForCallback</p>
<p> RASCS_Projected</p>
<p> RASCS_StartAuthentication 注釋:19</p>
<p> RASCS_CallbackComplete</p>
<p> RASCS_LogonNetwork 注釋:21</p>
<p> RASCS_Interactive = &H1000</p>
<p> RASCS_RetryAuthentication</p>
<p> RASCS_CallbackSetByCaller</p>
<p> RASCS_PasswordExpired</p>
<p> RASCS_Connected = &H2000</p>
<p> RASCS_Disconnected</p>
<p>End Enum</p>
<p></p>
<p>注釋:取得目前連接信息</p>
<p>Public Function GetAllConnections(Conn() As RASCONN) As Long</p>
<p> Dim dl&, size&, validConnection&, counter%</p>
<p> ReDim Conn(0)</p>
<p> Conn(0).dwSize = 412</p>
<p> size = 412</p>
<p> dl& = RasEnumConnections(Conn(0), size, validConnection)</p>
<p> If validConnection > 0 Then</p>
<p> ReDim Conn(validConnection - 1)</p>
<p> Conn(0).dwSize = 412</p>
<p> size = validConnection * 412</p>
<p> dl& = RasEnumConnections(Conn(0), size, validConnection)</p>
<p> End If</p>
<p> If dl = 0 Then</p>
<p> GetAllConnections = validConnection</p>
<p> Else</p>
<p> GetAllConnections = -1</p>
<p> End If</p>
<p>End Function</p>
<p></p>
<p>注釋:取得所有撥號網絡Entry的信息(不管有沒有連接)</p>
<p>Public Function GetRasNameEntries(Entry() As RASENTRYNAME, Optional PhonePath As String) As Long</p>
<p>Dim di As Long, lpcb As Long, lpentries As Long</p>
<p>Dim addit As Long</p>
<p>Dim i As Long</p>
<p></p>
<p>di& = RasEnumEntries(vbNullString, PhonePath, 0, 0, lpentries)</p>
<p>If lpentries > 0 Then</p>
<p> i = lpentries - 1</p>
<p> ReDim Entry(i)</p>
<p> len5 = LenB(Entry(0))</p>
<p> addit = (4 - (len5 Mod 4)) Mod 4</p>
<p> Entry(0).dwSize = len5 + addit</p>
<p> lpcb = Entry(0).dwSize * (i + 1)</p>
<p> di& = RasEnumEntries(vbNullString, PhonePath, Entry(0), lpcb, lpentries)</p>
<p>End If</p>
<p>If di = 0 Then</p>
<p> GetRasNameEntries = lpentries</p>
<p>Else</p>
<p> GetRasNameEntries = -1</p>
<p>End If</p>
<p>End Function</p>
<p>注釋:呼叫修改某一個連接Entry 的Window</p>
<p>Public Sub EditEntry(ByVal EntryName As String, Optional ByVal PhonePath As String)</p>
<p>Dim di As Long</p>
<p>di = RasEditPhonebookEntry(0, PhonePath, EntryName)</p>
<p>End Sub</p>
<p>注釋:於撥號網絡中新增一個Entry</p>
<p>Public Sub CreateEntry(Optional ByVal PhonePath As String)</p>
<p>Call RasCreatePhonebookEntry(0, PhonePath)</p>
<p>End Sub</p>
<p></p>
<p>注釋:自動撥接(Win95 4, 5 個叁數不傳,或為vbNullString)</p>
<p>Public Function DialUp(ByVal EntryName As String, ByVal UserN As String, _</p>
<p> ByVal Pwd As String, Optional ByVal PhoneBook As String, Optional sDomain As String) As Long</p>
<p>Dim RasDialPara As RASDIALPARAMS</p>
<p>Dim bya() As Byte, di As Long</p>
<p>Dim len5 As Long, i As Long</p>
<p>Dim hRasConn As Long</p>
<p></p>
<p>len5 = LenB(RasDialPara)</p>
<p>i = (4 - (len5 Mod 4)) Mod 4</p>
<p>RasDialPara.dwSize = len5 + i 注釋:1052</p>
<p>bya = StrConv(EntryName, vbFromUnicode) + ChrB(0)</p>
<p>Call CopyByte(RasDialPara.szEntryName, bya)</p>
<p></p>
<p>bya = StrConv(UserN, vbFromUnicode) + ChrB(0)</p>
<p>Call CopyByte(RasDialPara.szUserName, bya)</p>
<p></p>
<p>bya = StrConv(Pwd, vbFromUnicode) + ChrB(0)</p>
<p>Call CopyByte(RasDialPara.szPassword, bya)</p>
<p></p>
<p>bya = StrConv(sDomain, vbFromUnicode) + ChrB(0)</p>
<p>Call CopyByte(RasDialPara.szDomain, bya)</p>
<p>注釋:若使用以下CallBack function的方式,則RasDial()不等連接成功或失敗便結束。</p>
<p>di = RasDial(0, PhoneBook, RasDialPara, 0, AddressOf RasDialFunc, hRasConn)</p>
<p></p>
<p>注釋:若第二、三個叁數都是0則,RasDial會等連接成功或失敗後才執行下一行指令</p>
<p>注釋:di = RasDial(0, PhoneBook, RasDialPara, 0, 0, hRasConn)</p>
<p></p>
<p>If di = 0 Then</p>
<p> DialUp = hRasConn</p>
<p>Else</p>
<p> DialUp = 0</p>
<p> Dim str5 As String</p>
<p> str5 = String(255, Chr(0))</p>
<p> Call RasGetErrorString(di, str5, 256)</p>
<p> MsgBox Left(str5, InStr(1, str5, Chr(0)) - 1), vbCritical</p>
<p> Call HangUp(hRasConn)</p>
<p>End If</p>
<p>End Function</p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p>Public Sub RasDialFunc(ByVal unMsg As Long, _</p>
<p> ByVal ConnState As Long, _</p>
<p> ByVal dwError As Long)</p>
<p>If ConnState = &H2000 Then</p>
<p> 注釋: Connect Complete</p>
<p>End If</p>
<p></p>
<p>Debug.Print unMsg, ConnState</p>
<p>End Sub</p>
<p>注釋:取消撥接</p>
<p>Public Function HangUp(ByVal hconn As Long) As Boolean</p>
<p>Dim st As Long, len5 As Long</p>
<p>Dim i As Long, ConStatus As RASCONNSTATUS</p>
<p>st = RasHangUp(hconn)</p>
<p>len5 = LenB(ConStatus)</p>
<p>i = (4 - (len5 Mod 4)) Mod 4</p>
<p>ConStatus.dwSize = len5 + i</p>
<p>Do While True</p>
<p> Call Sleep(0)</p>
<p> i = RasGetConnectStatus(hconn, ConStatus)</p>
<p> If i = ERROR_INVALID_HANDLE Then</p>
<p> Exit Do</p>
<p> End If</p>
<p>Loop</p>
<p>If st = 0 Then</p>
<p> HangUp = True</p>
<p>Else</p>
<p> HangUp = False</p>
<p>End If</p>
<p>End Function</p>
<p>注釋:取得連接狀態</p>
<p>Public Function GetConnectStatus(ByVal hocnn As Long) As Long</p>
<p>Dim i As Long, ConStatus As RASCONNSTATUS</p>
<p>Dim len5 As Long</p>
<p>len5 = LenB(ConStatus)</p>
<p>i = (4 - (len5 Mod 4)) Mod 4</p>
<p>ConStatus.dwSize = len5 + i</p>
<p>i = RasGetConnectStatus(hconn, ConStatus)</p>
<p>If i = 0 Then</p>
<p> GetConnectStatus = ConStatus.RasConnState</p>
<p>Else</p>
<p> GetConnectStatus = -1</p>
<p>End If</p>
<p>End Function</p>
<p>Private Sub CopyByte(dest() As Byte, sour() As Byte)</p>
<p>Dim sourL As Long, sourU As Long</p>
<p>Dim destL As Long, destU As Long, i As Long, j As Long</p>
<p>sourL = LBound(sour)</p>
<p>sourU = UBound(sour)</p>
<p>destL = LBound(dest)</p>
<p>destU = UBound(dest)</p>
<p>j = 0</p>
<p>For i = sourL To sourU</p>
<p> dest(destL + j) = sour(i)</p>
<p> j = j + 1</p>
<p> If j >= (destU - destL) + 1 Then</p>
<p> Exit For</p>
<p> End If</p>
<p>Next i</p>
<p>End Sub</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -