этот пример смотрит есть активные соединения и если нету - звонит по заданному соединению возвращая хэндл соединения. Скопировал прямо из кода билдеровой проги так что если что непонятно спрашивай. Работает под 2000, под 9х не тестировал за неимением оной. И не забудь перед #include "ras.h" сделать:
#pragma pack(1)
#define WINVER 0x400
Form1->ComboBox3->Text здесь это название соединения (не номер а именно название).
int dialend;
void WINAPI RasDialFunc(UINT unMsg,RASCONNSTATE rasconnstate,DWORD dwError)
{
switch (rasconnstate)
{
case RASCS_PortOpened:Form1->StatusBar1->Panels->Items[1]->Text="Port opened";break;
case RASCS_DeviceConnected:Form1->StatusBar1->Panels->Items[1]->Text="Device connected";break;
case RASCS_Authenticate:Form1->StatusBar1->Panels->Items[1]->Text="Authentificate...";break;
case RASCS_Authenticated:Form1->StatusBar1->Panels->Items[1]->Text="Authentificated";break;
case RASCS_Connected:Form1->StatusBar1->Panels->Items[1]->Text="Connected";dialend=1;break;
case RASCS_Disconnected:Form1->StatusBar1->Panels->Items[1]->Text="Connect failed";dialend=2;break;
}
if(dwError){Form1->StatusBar1->Panels->Items[1]->Text="Dial error";er=dwError;dialend=2;};
}
HRASCONN __fastcall checkdial()
{
if(!Form1->ComboBox3->ItemIndex)return 0;
RASCONN rsc[128];
while(true)
{
Form1->StatusBar1->Panels->Items[1]->Text="Checking dialup connections...";
DWORD rasnum=0;
DWORD rassz=128*sizeof(RASCONN);
ZeroMemory(rsc,128*sizeof(RASCONN));
rsc[0].dwSize=sizeof(RASCONN);
RasEnumConnections(&rsc[0],&rassz,&rasnum);
for(DWORD i=0;i<rasnum;i++)
{
RASCONNSTATUS rsconst;rsconst.dwSize=sizeof(rsconst);
if(!RasGetConnectStatus(rsc[i].hrasconn,&rsconst))
{
if(rsconst.rasconnstate==RASCS_Disconnected){RasHangUp(rsc[i].hrasconn);Sleep(1000);}
if(rsconst.rasconnstate==RASCS_Connected)return 0;
}
}
hRasConn=0;
RASDIALPARAMS rdp;ZeroMemory(&rdp,sizeof(rdp));rdp.dwSize=sizeof(rdp);
strcpy(rdp.szEntryName,Form1->ComboBox3->Text.c_str());
int passet=0;
Form1->StatusBar1->Panels->Items[1]->Text="Dialing...";
RasGetEntryDialParams(0,&rdp,&passet);
nowdial=true;dialend=0;
er=RasDial(0,0,&rdp,0,RasDialFunc,&hRasConn);
if(!er)while(!dialend)Sleep(100); if(er|dialend==2))
{
if(hRasConn){RasHangUp(hRasConn);Sleep(1000);};
nowdial=false;
Form1->StatusBar1->Panels->Items[1]->Text="Error "+(AnsiString)er+". Retry in 5 seconds...";
Sleep(5000);
}
else return hRasConn;
}
}
Мне конкретно надо получить номер телефона соединения...21.04.03 16:32 Автор: Helmet Статус: Незарегистрированный пользователь
> Вызываю сначала > > RasEnumEntries(Nil,nil,@tRASENTRYNAM_E,cbBuf,Entry); > > получаю список всех соединений... > > Затем вызываю > > RasGetEntryDialParams(nil,DialParams,fp); > > Получаю информацию о соединении... =) НО! Телефон в поле > > dialparams.szphonenumber > > почему то не заносится... > > Так вот как получить номер телефона? > > > >
а ты случием не забыл при набивке структур занести размер структуры в dwSize ? есле не поможет то попробуй поюзать RasGetEntryProperties
присутствует начиная с Win98 SE