Newsgroup: it.comp.lang.delphi
Titolo: Consiglio componente

Ragazzi vorrei un consiglio su un componente per detectare la
connessione ad internet che sfrutti il RAS, che sia facile da
installare e usare, perche' quelli che ho scaricato mi hanno fatto
impazzire!
Ciao e Grazie.
Guybrush

 impazzire!
eheheh.... sempre il solito problema, eh ?
Ciao!! Davide DG

impazzire!
Hai ragione...
Anche io ho il tuo stesso problema, ho bisogno di un componentino che mi
notifichi la connessione internet, pensavo di aver risolto con il componente
messo a disposizione da Piette (scaricabile insieme alla sua conversione
delle RAS) ma sembra che neppure quello faccia il suo dovere! :(
Se qualcuno ha qualche buon consiglio ....
Ciao!
--
- Carlo -

Carlo Bertuccini ha scritto nel messaggio ...
Prova questo :
const
  cERROR_BUFFER_TOO_SMALL = 603;
  cRAS_MaxEntryName       =  256;
  cRAS_MaxDeviceName      =  128;
  cRAS_MaxDeviceType      =  16;
type
  ERasError = class(Exception);
  HRASConn = DWord;
  PRASConn = ^TRASConn;
  TRASConn = record
     dwSize: DWORD;
     rasConn: HRASConn;
     szEntryName: Array[0..cRAS_MaxEntryName] Of Char;
     szDeviceType : Array[0..cRAS_MaxDeviceType] Of Char;
     szDeviceName : Array [0..cRAS_MaxDeviceName] of char;
  end;
  TRasEnumConnections =
      function (RASConn: PrasConn; { buffer to receive Connections data }
                var BufSize: DWord;    { size in bytes of buffer }
                var Connections: DWord { number of Connections written to
buffer }
                ): LongInt; stdcall;
var
  Form1: TForm1;
implementation
{$R *.DFM}
function RasConnectionCount : Integer;
var
  RasDLL    : HInst;
  Conns     : Array[1..4] of TRasConn;
  RasEnums  : TRasEnumConnections;
  BufSize   : DWord;
  NumConns  : DWord;
  RasResult : Longint;
begin
  Result := 0;
  //Load the RAS DLL
  RasDLL := LoadLibrary('rasapi32.dll');
  if RasDLL = 0 then exit;
  try
    RasEnums := GetProcAddress(RasDLL,'RasEnumConnectionsA');
    if @RasEnums = nil then
      raise ERasError.Create('RasEnumConnectionsA not found in
rasapi32.dll');
    Conns[1].dwSize := Sizeof (Conns[1]);
    BufSize := SizeOf(Conns);
    RasResult := RasEnums(@Conns, BufSize, NumConns);
    If (RasResult = 0) or (Result = cERROR_BUFFER_TOO_SMALL) then Result :=
NumConns;
  finally
    FreeLibrary(RasDLL);
  end;
Per utilizzarlo :
If RasConnectionCount > 0 Then
   ShowMessage('Connesso')
   Else
   ShowMessage('Disconnesso');
end;
end;

 Se qualcuno ha qualche buon consiglio ....
Se ti riferisci al fatto che ti puoi trovare nella condizione in cui sei
connesso ad internet ma non usi una connessione RAS, puoi sfruttare una
funzione della wininet.dll (mi pare, dovrei verificare).
Altrimenti basta giocare un po' con le RasAPI, ce n'è una che ti enumera le
connessioni, un'altra che te ne dice lo stato et voilat... metterle insieme
non è difficile.
Ciao
--
Andrea Magni
E-Mail: 
ama...@interac.it

non č difficile.
Sě, mi interessa quelle che usano il RAS. 
Quale sono tali API? Ti prego, pendo dalle tue labbra!  ;-)
Ciao
Guybrush

 Quale sono tali API? Ti prego, pendo dalle tue labbra!  ;-)
Ciao,
          qua sotto trovi un piccolo esempio di quanto dicevo.
Creare un componente, partendo da questo codice, č semplice, lo lascio a te
perchč vado molto di fretta...
function StatoToStr( stato: integer ):string;
var
    s: String;
begin
  s := '';
  case stato of
      RASCS_OpenPort: s := 'Opening port';
      RASCS_PortOpened: s := 'Port opened';
      RASCS_ConnectDevice: s := 'Connecting device';
      RASCS_DeviceConnected: s := 'Device connected';
      RASCS_AllDevicesConnected: s := 'All devices connected';
      RASCS_Authenticate: s := 'Start authenticating';
      RASCS_AuthNotify: s := 'Authentication: notify';
      RASCS_AuthRetry: s := 'Authentication: retry';
      RASCS_AuthCallback: s := 'Authentication: callback';
      RASCS_AuthChangePassword: s := 'Authentication: change password';
      RASCS_AuthProject: s := 'Authentication: projecting';
      RASCS_AuthLinkSpeed:s := 'Authentication: link speed';
      RASCS_AuthAck: s := 'Authentication: acknowledge';
      RASCS_ReAuthenticate: s := 'Authentication: reauthenticate';
      RASCS_Authenticated: s := 'Authenticated';
      RASCS_PrepareForCallback: s := 'Preparing for callback';
      RASCS_WaitForModemReset: s := 'Waiting for modem reset';
      RASCS_WaitForCallback: s := 'Waiting for callback';
      RASCS_Projected: s := 'Projected';
      RASCS_StartAuthentication: s := 'Start authentication';
      RASCS_CallbackComplete: s := 'Callback complete';
      RASCS_LogonNetwork: s := 'Logging on network';
      RASCS_Interactive: s := 'Interactive';
      RASCS_RetryAuthentication: s := 'Retry Authentication';
      RASCS_CallbackSetByCaller: s := 'Callback set by caller';
      RASCS_PasswordExpired: s := 'Password expired';
      RASCS_Connected: s := 'Connected';
      RASCS_Disconnected: s := 'Disconnected';
      end;
  Result := s;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
    bufsize: Longint;
    numEntries: Longint;
    x: Integer;
    entries: Array[1..100] of TRasConn;
    stat: TRasConnStatus;
begin
  entries[1].dwSize := SizeOf( TRasConn );
  bufsize := SizeOf( TRasConn ) * 100;
  ZeroMemory( @stat, Sizeof( TRasConnStatus ) );
  stat.dwSize := Sizeof( TRasConnStatus );
  if RasEnumConnections( @entries[1], bufsize, numEntries) = 0 then
    begin
    if numentries = 0 then
      ShowMessage('Nessuna connessione attiva.');
    if numEntries > 0 then
      begin
       for x := 1 to numEntries do
         begin
           ZeroMemory( @stat, Sizeof( TRasConnStatus ) );
           RasGetConnectStatus( entries[x].hrasconn, stat );
           ShowMessage( 'Connessione: ' + entries[x].szEntryName +#13#10+
                        'Tipo di periferica: '+ Stat.szDeviceType +#13#10+
                        'Nome della periferica: '+ Stat.szDeviceName
+#13#10+
                        'Stato connessione : '+
tatoToStr( stat.rasconnstate ) );
         end;
      end;
    end;
end;
Ciao,
