Программное создание нового подключения

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dr-vic
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 13.01.2004 (Вт) 0:05

Программное создание нового подключения

Сообщение dr-vic » 28.04.2004 (Ср) 23:59

Подскажите, плиз, как можно в VB6 создать новое интернет-подключение (программно). Кажется это где-то в системном реестре, но где конкретно?
Заранее благодарен.

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 30.04.2004 (Пт) 4:15

Api-guide пишет:
'This program let you dial to your dial-up connections using whether
'the stored user name and password or the ones you specifies
'(It use RasDial for dialing)

'You need a form with a list,2 textbox and a command button

Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, ByVal pSrc As String, ByVal ByteLen As Long)
Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (Destination As Any, ByVal Length As Long)

Const RAS95_MaxEntryName = 256
Const RAS_MaxPhoneNumber = 128
Const RAS_MaxCallbackNumber = RAS_MaxPhoneNumber

Const UNLEN = 256
Const PWLEN = 256
Const DNLEN = 12
Private Type RASDIALPARAMS
dwSize As Long ' 1052
szEntryName(RAS95_MaxEntryName) As Byte
szPhoneNumber(RAS_MaxPhoneNumber) As Byte
szCallbackNumber(RAS_MaxCallbackNumber) As Byte
szUserName(UNLEN) As Byte
szPassword(PWLEN) As Byte
szDomain(DNLEN) As Byte
End Type

Private Type RASENTRYNAME95
'set dwsize to 264
dwSize As Long
szEntryName(RAS95_MaxEntryName) As Byte
End Type

Private Declare Function RasDial Lib "rasapi32.dll" Alias "RasDialA" (ByVal lprasdialextensions As Long, ByVal lpcstr As String, ByRef lprasdialparamsa As RASDIALPARAMS, ByVal dword As Long, lpvoid As Any, ByRef lphrasconn As Long) As Long
Private Declare Function RasEnumEntries Lib "rasapi32.dll" Alias "RasEnumEntriesA" (ByVal reserved As String, ByVal lpszPhonebook As String, lprasentryname As Any, lpcb As Long, lpcEntries As Long) As Long
Private Declare Function RasGetEntryDialParams Lib "rasapi32.dll" Alias "RasGetEntryDialParamsA" (ByVal lpcstr As String, ByRef lprasdialparamsa As RASDIALPARAMS, ByRef lpbool As Long) As Long

Private Function Dial(ByVal Connection As String, ByVal UserName As String, ByVal Password As String) As Boolean
Dim rp As RASDIALPARAMS, h As Long, resp As Long
rp.dwSize = Len(rp) + 6
ChangeBytes Connection, rp.szEntryName
ChangeBytes "", rp.szPhoneNumber 'Phone number stored for the connection
ChangeBytes "*", rp.szCallbackNumber 'Callback number stored for the connection
ChangeBytes UserName, rp.szUserName
ChangeBytes Password, rp.szPassword
ChangeBytes "*", rp.szDomain 'Domain stored for the connection
'Dial
resp = RasDial(ByVal 0, ByVal 0, rp, 0, ByVal 0, h) 'AddressOf RasDialFunc
Dial = (resp = 0)
End Function

Private Function ChangeToStringUni(Bytes() As Byte) As String
'Changes an byte array to a Visual Basic unicode string
Dim temp As String
temp = StrConv(Bytes, vbUnicode)
ChangeToStringUni = Left(temp, InStr(temp, Chr(0)) - 1)
End Function

Private Function ChangeBytes(ByVal str As String, Bytes() As Byte) As Boolean
'Changes a Visual Basic unicode string to an byte array
'Returns True if it truncates str
Dim lenBs As Long 'length of the byte array
Dim lenStr As Long 'length of the string
lenBs = UBound(Bytes) - LBound(Bytes)
lenStr = LenB(StrConv(str, vbFromUnicode))
If lenBs > lenStr Then
CopyMemory Bytes(0), str, lenStr
ZeroMemory Bytes(lenStr), lenBs - lenStr
ElseIf lenBs = lenStr Then
CopyMemory Bytes(0), str, lenStr
Else
CopyMemory Bytes(0), str, lenBs 'Queda truncado
ChangeBytes = True
End If
End Function

Private Sub Command1_Click()
Dial List1.Text, Text1, Text2
End Sub


Private Sub List1_Click()
Dim rdp As RASDIALPARAMS, t As Long
rdp.dwSize = Len(rdp) + 6
ChangeBytes List1.Text, rdp.szEntryName
'Get User name and password for the connection
t = RasGetEntryDialParams(List1.Text, rdp, 0)
If t = 0 Then
Text1 = ChangeToStringUni(rdp.szUserName)
Text2 = ChangeToStringUni(rdp.szPassword)
End If
End Sub

Private Sub Form_Load()
'example created by Daniel Kaufmann (daniel@i.com.uy)
'load the connections
Text2.PasswordChar = "*"
Command1.Caption = "Dial"
Dim s As Long, l As Long, ln As Long, a$
ReDim r(255) As RASENTRYNAME95

r(0).dwSize = 264
s = 256 * r(0).dwSize
l = RasEnumEntries(vbNullString, vbNullString, r(0), s, ln)
For l = 0 To ln - 1
a$ = StrConv(r(l).szEntryName(), vbUnicode)
List1.AddItem Left$(a$, InStr(a$, Chr$(0)) - 1)
Next
If List1.ListCount > 0 Then
List1.ListIndex = 0
List1_Click
End If
End Sub

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 30.04.2004 (Пт) 4:25

Мне кажется, dr-vic имел в виду не подключение по уже существующему соединению, а создание такового. То есть, запись номера, логина и пароля в реестр...

dr-vic
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 13.01.2004 (Вт) 0:05

Сообщение dr-vic » 02.05.2004 (Вс) 9:37

Сорри, если я не совсем точно поставил вопрос. Amed прав, я именно
про создание нового подключения с телефоном, логином и т.д.
То есть я знаю:
В HKEY_CURRENT_USER\RemoteAccess

ConnectionName = "Имя соединения"
ret = RegOpenKeyEx(HKEY_CURRENT_USER, "RemoteAccess\Addresses", 0, KEY_READ, hKey)
ret = RegSetValueEx(hKey, ConnectionName , 0, REG_BINARY, &0 , 4)
затем
ProfileConnectName = "RemoteAccess\Profile\" & ConnectName
ret = RegCreateKeyEx(HKEY_CURRENT_USER, ConnectName, 0, vbNull, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, sa, _
hKey, nDisp)
ret = RegSetValueEx(hKey, "Domain", 0, REG_SZ, "", 4)
ret = RegSetValueEx(hKey, "User", 0, REG_SZ, UserName, 4)
ret = RegSetValueEx(hKey, "IP", 0, REG_BINARY, IP , 4)
ret = RegSetValueEx(hKey, "Mode", 0, REG_BINARY, Mode, 4)
ret = RegSetValueEx(hKey, "MultiLink", 0, REG_BINARY, MultiLink, 4)
и, если нужно сделать подлючение используемым по умолчанию, то
ret = RegOpenKeyEx(HKEY_CURRENT_USER, "RemoteAccess", 0, KEY_READ, hKey)
ret = RegSetValueEx(hKey, "InternetProfile" , 0, REG_SZ, ConnectionName , 4)

Пока не разобрался, каким образом присваивать двоичные значения
ключам REG_BINARY и, в частности, что должно содержаться в
значении ключа в HKCU\RemoteAcces\Addresses.
То есть как раз это все логин, пароль и телефон.
Может кто-нибудь просветит?
Заранее благодарен.

dr-vic
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 13.01.2004 (Вт) 0:05

Сообщение dr-vic » 06.05.2004 (Чт) 16:28

To GM: большое спасибо за цитату. У меня нет MSDN, поэтому
весьма к месту. Сначала ответил не разбираясь, а потом посидел
покопался. Очень забавные функции: я их нигде больше не нашел,
ни в русских справочниках по API, ни у Эппельмана. Как я понял
из описания, это растровые функции для работы с регистром а, в
частности, с RemoteControls. То есть, если есть RasGetEntryDialParams,
то должно быть что-то типа RasSetEntryDialParams? А если есть, то
как ее объявлять?
К стати, не могу понять: RasGetEntryDialParams хорошо возвращает
все параметры описанные в RASDIALPARAMS за исключением szPhoneNumber - упорно пустая строка! В чем тут фишка?
Заранее благодарен.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 06.05.2004 (Чт) 17:23

В WindowsXP есть файл C:\Documents and Settings\All Users\Application Data\Microsoft\Network\Connections\Pbk\rasphone.pbk

Вроде INI-файл, хранящий информацию о сетевых подключениях.

dr-vic
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 13.01.2004 (Вт) 0:05

Сообщение dr-vic » 06.05.2004 (Чт) 21:55

RasSetEntryDialParams я сам раскопал на MSDN.com. Вот, если кому интересно: http://msdn.microsoft.com/library/en-us ... params.asp


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 5

    TopList