Newsgroup: it.comp.programmare.win32
Titolo: api

salve,
sapete dirmi quale api usare per monitorare la connessione internet?
avrei bisogno di sapere se in un determinato intervallo di tempo
c'e' stato invio e/o ricezione di frame.
Il tutto in Windows98.
Grazie,
Salvatore

 ha scritto nel messaggio
news:8sfc1c$k5a$1...@lacerta.tiscalinet.it...

Sei hai a portata di mano l'SDK della Microsoft, esiste
una funzione (RASConnectionNotification, per NT4.0, Win98 o superiori) che
segnala un object di tipo evento.
Con un thread che aspetta che tale object diventi segnalato, puoi sapere
quando qualcuno si connette ad Internet. Se hai bisogno di un codice di
esempio, fammi sapere.

Se puoi inviarmi il codice d'esempio te ne sarei grato.
Saluti,
Salvatore
-- 
Posted from [195.60.137.6] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:000f01c03c24$21d26660$0100a8c0@new...

Come fatto. Più che mandarti un codice di esempio, te lo copio in questa
mail depurandolo di tutte le cose che non ti interessano.
//--------------------------------------------------------------------------
-
#include <vcl.h>
#include <ras.h>
#pragma hdrstop
#include "Ras.h"
#pragma package(smart_init)
//--------------------------------------------------------------------------
-
__fastcall TRasOn::TRasOn(bool CreateSuspended)
        : TThread(CreateSuspended)
{
  // Qui creo un oggetto di tipo TEvent (se non usi il C++ Builder, è
l'equivalente della API CreateEvent). Questo evento
  // segnalerà l'attivazione di una connessione RAS.
  RasOnEvent = new TEvent(NULL,true,false,"RAS_On_Event");
  // Resetto l'evento (l'equivalente API è ResetEvent) e chiamo l'API di cui
ti ho parlato.
  RasOnEvent->ResetEvent();
  RasConnectionNotification(INVALID_HANDLE_VALUE,(void *)
RasOnEvent->Handle,RASCN_Connection);
  // Ti elenco i tre parametri. Specificando INVALID_HANDLE_VALUE, gli dico
di monitorare qualsiasi connessione RAS.
  // Gli passo l'handle dell'oggetto evento, e gli dico di monitorare
l'evento "Connessione".
}
//--------------------------------------------------------------------------
-
void __fastcall TRasOn::Execute()
{
   // Qui metto l'oggetto RasOn in fase di attesa, aspettando che una
connessione si attivi. Questo oggetto è ovviamente
   // contenuto in un thread.
  // l'API equivalente della seconda funzione è WaitForSingleObject
    RasOnEvent->ResetEvent();
    RasOnEvent->WaitFor(INFINITE);
    // codice da eseguire nel caso di avvenuta connessione
}
//--------------------------------------------------------------------------
-
__fastcall TRasOff::TRasOff(bool CreateSuspended)
        : TThread(CreateSuspended)
{
  // Qui è tutto identico al caso RasOn, solo che creo un oggetto evento per
la disconnessione.
  RasOffEvent = new TEvent(NULL,true,false,"RAS_Off_Event");
  // Tutto uguale a sopra, cambia l'handle del secondo parametro (si
riferisce ovviamente al secondo oggetto evento), e gli
  // dico di monitorare l'evento "Disconnessione".
  RasOffEvent->ResetEvent();
  RasConnectionNotification(INVALID_HANDLE_VALUE,(void *)
RasOffEvent->Handle,RASCN_Disconnection);
}
//--------------------------------------------------------------------------
-
void __fastcall TRasOff::Execute()
{
   // Aspetto che avvenga una disconnessione. Il thread è ovviamente diverso
da quello sopra, quindi ti servono due
   // thread per realizzare questo sistema (CreateThread è l'equivalente
API).
    RasOffEvent->ResetEvent();
    RasOffEvent->WaitFor(INFINITE);
}
Il file di include lo aggiungo, ma serve ovviamente solo se usi C++.
Dichiara i due thread.
//--------------------------------------------------------------------------
-
#ifndef RasH
#define RasH
//--------------------------------------------------------------------------
-
#include <Classes.hpp>
#include <Syncobjs.hpp>
//--------------------------------------------------------------------------
-
class TRasOn : public TThread
{
private:
  TEvent *RasOnEvent;
protected:
        void __fastcall Execute();
public:
        __fastcall TRasOn(bool CreateSuspended);
};
class TRasOff : public TThread
{
private:
  TEvent *RasOffEvent;
protected:
        void __fastcall Execute();
public:
        __fastcall TRasOff(bool CreateSuspended);
};
//--------------------------------------------------------------------------
-
#endif
Spero di esserti stato utile.



















    RasOffEvent->ResetEvent();
    RasOffEvent->WaitFor(INFINITE);
}


Ricorda che questa soluzione non funziona con Win95. Se per un motivo o per
un altro non vuoi utilizzare i thread, l'unica chance che ti rimane è quella
di utilizzare un timer che ogni secondo o due chiama la RasGetConnectStatus.
Non te la consiglio.


Scusa, ma il news di inwind è pirla!!!!!


 via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Come fatto. Più che mandarti un codice di esempio, te lo copio in questa











    RasOffEvent->ResetEvent();
    RasOffEvent->WaitFor(INFINITE);
}


Spero di esserti stato utile.