Форум: "Сети";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
ВнизИмпортирование данных о соединении Найти похожие ветки
← →
BlackSun (2003-12-01 23:41) [0]Импортирую данные следующим образом. Вся проблема в том, что если в соединении указано несколько телефонных номеров, то я ни одного не получаю. Как мне получить все телефонные номера? Подскажите, пожалуйста...
procedure LoadEntry(const EntryName: string; var UserName,Password,PhoneNumber: string);
var
re: TRasEntry; EntrySize, DevInfoSize: integer;
rdp: TRASDIALPARAMS;
PasswordFlag: BOOL;
Dns,DnsAlt:string;
begin;
UserName:=""; Password:=""; PhoneNumber:="";
if EntryName<>"" then begin; // setup Ras Dial Parameters
FillChar(rdp,SizeOf(rdp),0); rdp.dwSize:=SizeOf(rdp);
strCopy(rdp.szEntryName, PChar(EntryName));
if RasGetEntryDialParamsA(nil, rdp, PasswordFlag)=0 then begin;
UserName:=rdp.szUserName;
Password:=rdp.szPassword;
re.dwSize:=SizeOf(re); EntrySize:=SizeOf(re); DevInfoSize:=0;
if RasGetEntryPropertiesA(nil,PChar(EntryName),@re,EntrySize,nil,DevInfoSize)=0 then begin;
PhoneNumber:=re.szLocalPhoneNumber;
with re.ipaddrDns do Dns:=Format("%d.%d.%d.%d",[a,b,c,d]);
with re.ipaddrDnsAlt do DnsAlt:=Format("%d.%d.%d.%d",[a,b,c,d]);
end;
end;
end;
end;
← →
BlackSun (2003-12-02 16:41) [1]Неужели никто не знает? :( Очень нужно...
← →
dimod (2003-12-05 11:04) [2]Привет,
Используй RAS API
RasEnumEntries для получения списка
и RasGetEntryProperties для каждого элемента списка
← →
BlackSun (2003-12-06 05:19) [3]2dimod, Хмм... а я соб-но так и делаю в исходнике...получаю имя соединения, а потом пытаюсь получить телефоны данного соединения, вот только если там несколько телефонов, то функция RasGetEntryPropertiesА ничего не возвращает, а если один телефон, то тогда она один телефон и возвращает...
← →
dimod (2003-12-08 18:07) [4]Вырезка из MSDN
// WINVER < 0x400 = Windows NT 3.5, Windows NT 3.51
// WINVER = 0x400 = Windows 95, Windows98, Windows NT4
// WINVER > 0x400 = Windows NT4 enhancements
// WINVER = 0x500 = Windows 2000
...
typedef struct tagRASENTRY {
DWORD dwSize;
DWORD dwfOptions;
//
// Location/phone number.
//
DWORD dwCountryID;
DWORD dwCountryCode;
TCHAR szAreaCode[ RAS_MaxAreaCode + 1 ];
TCHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
DWORD dwAlternateOffset;
//
// PPP/Ip
//
RASIPADDR ipaddr;
RASIPADDR ipaddrDns;
RASIPADDR ipaddrDnsAlt;
RASIPADDR ipaddrWins;
RASIPADDR ipaddrWinsAlt;
//
// Framing
//
DWORD dwFrameSize;
DWORD dwfNetProtocols;
DWORD dwFramingProtocol;
//
// Scripting
//
TCHAR szScript[ MAX_PATH ];
//
// AutoDial
//
TCHAR szAutodialDll[ MAX_PATH ];
TCHAR szAutodialFunc[ MAX_PATH ];
//
// Device
//
TCHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
TCHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
//
// X.25
//
TCHAR szX25PadType[ RAS_MaxPadType + 1 ];
TCHAR szX25Address[ RAS_MaxX25Address + 1 ];
TCHAR szX25Facilities[ RAS_MaxFacilities + 1 ];
TCHAR szX25UserData[ RAS_MaxUserData + 1 ];
DWORD dwChannels;
//
// Reserved
//
DWORD dwReserved1;
DWORD dwReserved2;
#if (WINVER >= 0x401)
//
// Multilink
//
DWORD dwSubEntries;
DWORD dwDialMode;
DWORD dwDialExtraPercent;
DWORD dwDialExtraSampleSeconds;
DWORD dwHangUpExtraPercent;
DWORD dwHangUpExtraSampleSeconds;
//
// Idle timeout
//
DWORD dwIdleDisconnectSeconds;
#endif
#if (WINVER >= 0x500)
//
// Port Name
//
TCHAR szPortName[ RAS_MaxDeviceName + 1 ];
#endif
} RASENTRY;
Посмотри описание структуры TRasEntry. Может у тебя
скомпиллировано не для NT-платформы.
dwAlternateOffset
Specifies the offset, in bytes, from the beginning of the structure to a list of consecutive null-terminated strings. The last string is terminated by two consecutive null characters. The strings are alternate phone numbers that RAS dials in the order listed if the primary number (see szLocalPhoneNumber) fails to connect. The alternate phone number strings are ANSI or Unicode, depending on whether you use the ANSI or Unicode version of the structure.
По dwAlternateOffset-смещению от начала структуры список
строк телефонов (строка с завершающим #0, как в Си).
Для получения версии структуры по MSDN необходимо
var
Entry: LPRasEntry;
EntrySize, devinfoSize, LenNum1, Ofs: Integer;
PDataBa : PByteArray;
NumAdd : String; // доп. номера
...
EntrySize := 0; // обязательно
DevInfoSize := 0;
// такой вызов
if RasGetEntryProperties(nil, PChar(NameEntry), nil,
EntrySize, nil, DevInfoSize) <> ERROR_BUFFER_TOO_SMALL
then Exit;
Entry := AllocMem(EntrySize); // EntrySize - вот он какой размер
Entry^.dwSize := SizeOf(TRasEntry);
if RasGetEntryProperties(nil, PChar(NameEntry), Entry,
EntrySize, nil, DevInfoSize) = 0 then begin
// далее работаем по плану
// ...
NumAdd := "";
if (Entry^.dwAlternateOffset > 0)
then begin
// тут может надо проверять границы
PDataBa := PByteArray(Entry);
Ofs := Entry^.dwAlternateOffset;
while (StrLen(PChar(PDataBa[Ofs])) > 0) do begin
// гоним все в одну строку, разделяя пробелом
NumAdd := NumAdd + " " + PChar(PDataBa[Ofs]);
Ofs := StrLen(PChar(PDataBa[Ofs])) + 1; // + 1 для #0
end;
end;
end;
P.S.: нужно отладить.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c