Tester une connexion de modem [Résolu]

Signaler
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
25 août 2015
-
Messages postés
205
Date d'inscription
samedi 10 mai 2003
Statut
Membre
Dernière intervention
2 juin 2005
-
Bonjour à tous,

J'essai de tester une connexion de modem, mais je n'y arrive pas.
Pour mon application je veux utiliser un modem externe, alors que j'ai un accés direct à internet par le réseau.
j'ai trouvé ce code pour tester la connexion :

Function DetectionConnexion: Boolean;
Var
dwFlags: DWord;
Begin
dwFlags := INTERNET_CONNECTION_MODEM or INTERNET_CONNECTION_LAN or INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@dwFlags, 0);
End;

Mais ca ne marche pas, il me dit tout le temps que je suis connecté alors que le modem n'arrive pas à se connecter.

Comment dois-je m'y prendre pour tester la connexion du modem???

Merci d'avance
Isa

19 réponses

Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
apres moulte rechch sur google, cette fonction est faite pour detecter le type de connexion, et non pas si on est connecté ou pas au net.
en fait pour detecter si une connexion est faite, il faut faire un ping ou choper une url etc mais c pas tres propre. de plus ce n'est pas 100% certain. un sujet sur VBFRANCE est a lire a propos de la detection de connexion (meme si comme moi tu ne connais pas VB :D)
lien : http://www.vbfrance.com/code.aspx?id=27454
ne fais pas attention a la source, elle est 100% inutilisable :) meme transcrite en delphi.
bonne lecture :D

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! ;)

-------------------------------------------
http://diabloporc.free.fr : mon site refait ! Delphi power !
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
Salut,
J'arrive peut être en retard, mais, j'ai retrouvé quelque chose concernant la connexion modem à Internet qui peut t'intéresser.
J'utilisais RASAPI32.dll et son interface RAS.PAS (que tu peux trouver ici.
On y trouve les fonctions suivantes :
function RasEnumEntries; external rasapi32 name 'RasEnumEntriesA';
function RasGetEntryDialParams; external rasapi32 name 'RasGetEntryDialParamsA';
function RasDial; external rasapi32 name 'RasDialA';
function RasHangUp; external rasapi32 name 'RasHangUpA';
function RasEditPhonebookEntry; external rasapi32 name 'RasEditPhonebookEntryA';
function RasCreatePhonebookEntry; external rasapi32 name 'RasCreatePhonebookEntryA';
function RasGetConnectStatus; external rasapi32 name 'RasGetConnectStatusA';
function RasEnumConnections; external rasapi32 name 'RasEnumConnectionsA';
function RasGetErrorString; external rasapi32 name 'RasGetErrorStringA';
function RasGetProjectionInfo; external rasapi32 name 'RasGetProjectionInfoA';
function RasSetEntryDialParams; external rasapi32 name 'RasSetEntryDialParamsA';

et en particulier RasEnumConnections et RasGetConnectStatus que j'utilisait ainsi :

var
   ...
   RasStatus : RASCONNSTATUS;
   RasBuffer : RASCONN;
   RasNombre : integer;  
begin
RASNombre:=0;
  RasBuffer.dwSize:=sizeof(RASCONN);
  Resu:=RasEnumConnections(@RasBuffer,@RasSize,@RASNombre);
  if (resu=0) and (RASNombre>0) then
    begin
      ....
      RasStatus.dwSize:=sizeof(RASCONNSTATUS);
      resu:= RasGetConnectStatus( RasBuffer.hrasconn, @RasStatus);
      if resu = 0 then
        begin          Device:=#9+RasStatus.szDeviceType+#9+RasStatus.szDeviceName;
          if RasStatus.rasconnstate= RASCS_ConnectDevice then
            begin
              ......
              Caption :='Connexion';
            end;
          if RasStatus.rasconnstate= RASCS_Authenticate then
            begin
              .......
              Caption :='Autentification';
            end;
          if RasStatus.rasconnstate= RASCS_OpenPort then
            begin
              .......
              Caption :='Ouvert';
            end;
        end;
  ..... 


En gros, ça permet de surveiller un modem, et de récupérer les info de connexion comme la fenêtre stadard.

Tu as en plus les fonctions RasDial et RasHangup,pour numéroter et raccrocher (t'as pas cherché quelque chose dans le genre il y a peu ?)

Ken@vo

P.S. RAS ça veut dire Remote Acces
____________________
Code, Code, Codec !
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
hello,
c'est aussi la seule que je connaisse, si tu veux tester QUE le modem alors deja enleve :
" or INTERNET_CONNECTION_LAN or INTERNET_CONNECTION_PROXY"
comme ça, seulement la conexion modem sera testée.
dis moi si c mieux

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! ;)

-------------------------------------------
http://diabloporc.free.fr : mon site refait ! Delphi power !
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
25 août 2015

J'ai déjà essayé mais ça ne change rien. Je ne comprend pas pourquoi ça ne marche pas!!
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
moi (avant d'avoir ma freebox/routeur) j'avais une simple connexion LAN (sans le net) et cette fonction me disais ke j'étais connecté... connecté au reseau : oui, mais eu net, non :/
desole je n'ai pas meilleure solution sous la main

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! ;)

-------------------------------------------
http://diabloporc.free.fr : mon site refait ! Delphi power !
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
25 août 2015

Même en ayant le modem éteint il me renvoie que le connexion est faite.
Merci quand même.
Isa :kisses)
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
25 août 2015

Merci beaucoup d'avoir fait la recherche.
Pour le VB j'ai pas de soucis, j'ai passé près de 2 ans en tant que developpeur VB.
Merci beaucoup!!!
:kisses) :kisses) :kisses) :kisses)
Isa
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
25 août 2015

Merci beaucoup Kenavo, je vais essayer ta méhtode.
Sinon ma connexion je l'ai faite dans le fichier .bat
:kisses)
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
25 août 2015

Excuse moi mais j'ai une question très conne. :shy)
Tu les déclare ou RASCONNSTATUS et RASCONN???
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
RASCONNSTATUS et RASCONN sont des types définis dans Ras.pas

Ken@vo
____________________
Code, Code, Codec !
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
25 août 2015

Ok j'ai trouvé, c'est TrasConnStatus.
Mais j'ai la fonction

Result:=RasEnumConnections(@RasBuffer,@RasSize,@RASNombre); 


et

result:= RasGetConnectStatus( RasBuffer.hrasconn, @RasStatus);


qui ne veut pas passer...
Il ne veut pas le 2nd paramètre.
C'est normal?
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
25 août 2015

Je n'arrive toujours pas à déclarer @RasSize???
Il faut faire comment?
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
Salut,

RasSize est une variable de type DWord; @RasSize est son adresse. Il faut donc déclarer
var 
RasSise : DWord;

Cette syntaxe à la c.. est directement issue du C, où la manière de passer les paramètres aux fonctions, par valeur ou par adresse ne s'exprime pas de la même façon.

Ken@vo
____________________
Code, Code, Codec !
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
25 août 2015

je l'avais bien déclarée en DWord mais j'ai le message suivant
"[Erreur] uOutil.pas(564): Les types des paramètres VAR originaux et formels doivent être identiques"
Je ne comprends pas ce que je dois modifier.
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
En résumé, ça donne (avec uses et toutes les variables) :
Uses
  Ras;
var
...
  RasStatus : RASCONNSTATUS; 
  RasBuffer : RASCONN;
  RASNombre  : DWord;
  RasSize     : DWord;
begin
RASNombre:=0;
RasBuffer.dwSize:=sizeof(RASCONN);
Resu:=RasEnumConnections(@RasBuffer,@RasSize,@RASNombre);
if (resu=0) and (RASNombre>0) then
begin
....
RasStatus.dwSize:=sizeof(RASCONNSTATUS);
resu:= RasGetConnectStatus( RasBuffer.hrasconn, @RasStatus);
if resu = 0 then
begin Device:=#9+RasStatus.szDeviceType+#9+RasStatus.szDeviceName;
if RasStatus.rasconnstate= RASCS_ConnectDevice then
begin
......
Caption :='Connexion';
end;
if RasStatus.rasconnstate= RASCS_Authenticate then
begin
.......
Caption :='Autentification';
end;
if RasStatus.rasconnstate= RASCS_OpenPort then
begin
.......
Caption :='Ouvert';
end;
end;
..... 



et je sais pas quoi dire d'autre !

Ken@vo
____________________
Code, Code, Codec !
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
25 août 2015

Ben quand je fais ça j'ai le message d'erreur que j'ai cité au dessus. je ne comprends plus rien.
Pourquoi il ne veut pas prendre les variables???
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
Oups !!!

La version de Ras.pas que je t'ai indiquée et celle que j'utilise sont très différentes. En fait on en trouve beaucoup de différentes.
Celle que j'ai indiquée est plutôt "Pascalisée". Il n'y a pas de @partout
Et en plus il faut initialiser la DLL !

 
var
    RasStatus : TRASConnStatus;
    RasBuffer : TRASConn;

procedure TForm1.FormCreate(Sender: TObject);
var
  resu : Boolean;
begin
//.......
  resu := InitRasLibrary;
end;

procedure TForm1.MaConnexion;
begin
 RASNombre:=0;
  RasBuffer.dwSize:=sizeof(TRasConn);
  Resu:=RasEnumConnections(@RasBuffer,RasSize,RASNombre);
  if (resu=0) and (RASNombre>0) then
    begin
      Filtre := 0 ;
      Visible := True;
      Application.ShowMainForm:=True;
      RasStatus.dwSize:=sizeof(TRASConnStatus);
      resu:= RasGetConnectStatus( RasBuffer.hrasconn, RasStatus);
      if resu = 0 then
......


enfin, je crois !

Ken@vo
____________________
Code, Code, Codec !
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
25 août 2015

C'est bon j'ai trouvé une autre version de RAS.pas et je n'ai plus d'erreur de complation. Maitenant faut que je fasse mes tests de connexion.
Merci beaucoup
Messages postés
205
Date d'inscription
samedi 10 mai 2003
Statut
Membre
Dernière intervention
2 juin 2005
1
Sakut Isabelle,

Si tu as réussi à arriver à tes fins pourrais tu me faire profiter de ton savoir ?
A noter, je suis un autodictate qui ne comprends pas grand chose a ton ce qui est écrit ci-dessus...

Meci, d'avance.