Hi Lars,
This code will retrieve phone numbers if given a connection name,
although I unfortunately don't know how to get the default one
currently. Take a look at other RAS (maybe, WinINet) functions.
~
Friend Declare Auto Function RasGetEntryProperties Lib
"rasapi32.dll" ( _
<MarshalAs(UnmanagedType.LPTStr)> ByVal lpszPhonebook As String,
_
<MarshalAs(UnmanagedType.LPTStr)> ByVal lpszEntry As String, _
ByVal lpRasEntry As IntPtr, _
ByRef lpdwEntryInfoSize As Integer, _
ByVal lpbDeviceInfo As IntPtr, _
ByVal lpdwDeviceInfoSize As IntPtr _
) As Integer
Const RAS_MaxDeviceType As Integer = 16
Const RAS_MaxPhoneNumber As Integer = 128
Const RAS_MaxEntryName As Integer = 256
Const RAS_MaxDeviceName As Integer = 128
Const RAS_MaxAreaCode As Integer = 10
Const RAS_MaxPadType As Integer = 32
Const RAS_MaxX25Address As Integer = 200
Const RAS_MaxFacilities As Integer = 200
Const RAS_MaxUserData As Integer = 200
Const MAX_PATH As Integer = 260
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> Friend
Structure RASENTRY
Public dwSize As Integer
Public dwfOptions As Integer
Public dwCountryID As Integer
Public dwCountryCode As Integer
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=RAS_MaxAreaCode +
1)> Public szAreaCode As String
<MarshalAs(UnmanagedType.ByValTStr,
sizeconst:=RAS_MaxPhoneNumber + 1)> Public szLocalPhoneNumber As String
Public dwAlternateOffset As Integer
Public ipaddr As RASIPADDR
Public ipaddrDns As RASIPADDR
Public ipaddrDnsAlt As RASIPADDR
Public ipaddrWins As RASIPADDR
Public ipaddrWinsAlt As RASIPADDR
Public dwFrameSize As Integer
Public dwfNetProtocols As Integer
Public dwFramingProtocol As Integer
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=MAX_PATH)> Public
szScript As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=MAX_PATH)> Public
szAutodialDll As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=MAX_PATH)> Public
szAutodialFunc As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=RAS_MaxDeviceType
+ 1)> Public szDeviceType As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=RAS_MaxDeviceName
+ 1)> Public szDeviceName As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=RAS_MaxPadType +
1)> Public szX25PadType As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=RAS_MaxX25Address
+ 1)> Public szX25Address As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=RAS_MaxFacilities
+ 1)> Public szX25Facilities As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=RAS_MaxUserData +
1)> Public szX25UserData As String
Public dwChannels As Integer
Public dwReserved1 As Integer
Public dwReserved2 As Integer
Public dwSubEntries As Integer
Public dwDialMode As Integer
Public dwDialExtraPercent As Integer
Public dwDialExtraSampleSeconds As Integer
Public dwHangUpExtraPercent As Integer
Public dwHangUpExtraSampleSeconds As Integer
Public dwIdleDisconnectSeconds As Integer
End Structure
<StructLayout(LayoutKind.Sequential)> Friend Structure RASIPADDR
Public a, b, c, d As Byte
End Structure
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Label1.Click
Dim MyRasEntry As RASENTRY
Dim REPtr As IntPtr
Dim size As Integer = 0
Dim Res As Integer
RasGetEntryProperties(Nothing, "<insert connection name here>",
IntPtr.Zero, size, IntPtr.Zero, IntPtr.Zero)
REPtr = Marshal.AllocHGlobal(size)
Marshal.WriteInt32(REPtr, Marshal.SizeOf(GetType(RASENTRY)))
Res = RasGetEntryProperties(Nothing, "<insert connection name
here>", REPtr, size, IntPtr.Zero, IntPtr.Zero)
If Res <> 0 Then
MessageBox.Show("Error ¹" & CStr(Res) & " occurred.")
Else
MyRasEntry = DirectCast(Marshal.PtrToStructure(REPtr,
GetType(RASENTRY)), RASENTRY)
MessageBox.Show(MyRasEntry.szLocalPhoneNumber)
If MyRasEntry.dwAlternateOffset > 0 Then
Dim CurPhoneAddr As Integer = REPtr.ToInt32 +
MyRasEntry.dwAlternateOffset
Dim CurPhone As String
Do Until Marshal.ReadByte(New IntPtr(CurPhoneAddr)) = 0
CurPhone = Marshal.PtrToStringAuto(New
IntPtr(CurPhoneAddr))
MessageBox.Show(CurPhone)
CurPhoneAddr += (CurPhone.Length + 1) *
Marshal.SystemDefaultCharSize
Loop
End If
End If
Marshal.FreeHGlobal(REPtr)
End Sub
~
HTH a bit,
Roman