Voici une fonction qui recherche la connexion internet et en fonction du débit génère ou pas un événement qui empêche la mise en veille.
exemple : veille aprés 15 minutes -> un test toutes les 9 minutes suffit .
Ps fonctionne sur windows 7 comme win Xp .
cette application est un service.
void __fastcall TService2::Timer1Timer(TObject *Sender)
{
// ULONG ulOutBufLen;
DWORD dwRetVal;
AnsiString Periode, Seuil_Paquet, LogFile, SizeLogFile;
char name_util[128];
unsigned long taille = sizeof(name_util);
GetUserName(name_util, &taille);
/*
MIB_IPSTATS *pStats;
pStats = (MIB_IPSTATS*) malloc(sizeof(MIB_IPSTATS));
if ((dwRetVal = GetIpStatistics(pStats)) != NO_ERROR) {
return;
}
*/
// lecture stat tcp
MIB_TCPSTATS *pTCPStats;
pTCPStats = (MIB_TCPSTATS*) malloc(sizeof(MIB_TCPSTATS));
if ((dwRetVal = GetTcpStatistics(pTCPStats)) != NO_ERROR)
return; ;
// antiveille test toutes les 2.5minute
// à plein debit (1megabit/sec) on a 100000 paquets/ 5 minute
// on divise par 2000 et par 2 ( test toutes les 2.5 minute 100000/2000/2 = 250
/* ng("Periode", "150000" ); // 2.5mn *60
Registry_u->WriteString("Seuil_Paquet", "250" );
Registry_u->WriteString("LogFile", "AntiveilleLog.txt" );
Registry_u->WriteString("SizeLogFile", "1000" ); */
R_registre("Periode", &Periode);
R_registre("Seuil_Paquet", &Seuil_Paquet);
R_registre("LogFile", &LogFile);
R_registre("SizeLogFile", &SizeLogFile);
Timer1->Interval = StrToInt(Periode);
if (((srcv != 0) || (ssnd != 0)) && ((pTCPStats->dwOutSegs + pTCPStats->dwInSegs) - (ssnd + srcv))
> StrToInt(Seuil_Paquet)) // 250)
{
// evenement anti veiile remet à zero le timer delai sans activité.
SetThreadExecutionState(ES_SYSTEM_REQUIRED);
// Beep();
logevent(DateTimeToStr(Date() + Time()) + " " + Periode + " " + name_util + " * " +
Seuil_Paquet + " <= " + IntToStr((int)((pTCPStats->dwOutSegs + pTCPStats->dwInSegs) -
(ssnd + srcv))) + "\r\n" );
}
else
logevent(DateTimeToStr(Date() + Time()) + " " + Periode + " " + name_util + " " +
Seuil_Paquet + " > " + IntToStr((int)((pTCPStats->dwOutSegs + pTCPStats->dwInSegs) -
(ssnd + srcv))) + "\r\n" );
ssnd = pTCPStats->dwOutSegs;
srcv = pTCPStats->dwInSegs;
free(pTCPStats);
// free(pStats);
}
Message édité par Esparic le 01-06-2012 à 08:04:39