Get information about Dial Up connections?

L

Lars Netzel

Hi

How do I get information (read) about the phonenumber in the default Dial Up
Connection?

Best Regards/
Lars Netzel
 
D

Dragon

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
 
L

Lars Netzel

Hi,

Thank you but I can't compile that code.. Getting blue underlines all over
the place. Especially on Marchall words...

Is there anywhere I can read about this more?

/Lars
 
A

Armin Zingler

Lars Netzel said:
Hi,

Thank you but I can't compile that code.. Getting blue underlines
all over the place. Especially on Marchall words...


Is it so hard find that Marshal is part of the
System.Runtime.InteropServices namespace? Just wondering.


Add

Imports System.Runtime.InteropServices

at the top of the file.


Armin
 
L

Lars Netzel

For me yes.. I don't know ANYTHING about APIs really so.. struct and <>
signs and Auto declares are a bit off for me.. BUT,, it doesn't matter.. I
just found that the Dial Up connections are saved in a separate textfile
this turned out to be easier to read thru the System.IO.File way... so..

Thanx anyway...
/Lars
 
A

Armin Zingler

Lars Netzel said:
For me yes.. I don't know ANYTHING about APIs really so..

'Marshal' has nothing to do with APIs. It's a class in the framework.


Armin
 
D

Dragon

Is there anywhere I can read about this more?

Probably, there:

http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemRuntimeInt
eropServicesMarshalClassTopic.asp
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemRuntimeInt
eropServicesMarshalAsAttributeClassTopic.asp
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemRuntimeInt
eropServicesStructLayoutAttributeClassTopic.asp

Since this three classes are in most cases essential for efficient Win32
API usage, I advice you to study them carefully.

HTH,
Roman
 
D

Dragon

Well, it's an approach too... But remember that in Windows 98/ME this
info is stored in registry, not in a file, and the retrieving using
RasGetEntryProperties is universal.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top