Commentçamarche.net
CodeS-SourceS
Rechercher un code, un tuto, une réponse

Aol connector v1.0.1 :: module gérant les connexions avec le client aol, et reconnexion auto

0/5 (12 avis)

Vue 8 759 fois - Téléchargée 351 fois

Description

Voilà, bah c'est ma première source publiée sur le Web...
Le module permet de se connecter via le client AOL, de se déconnecter aussi (c'est pratique!), de savoir si on est connecté...ect...
Une tite option interessante permet de se reconnecter en cas de déconnexion. J'ai rajouté une form pour voir ce que fait le module ne lui même...

Historique de l'application

- 22/01/2003 : Envoi de la première version du module.
- 23/01/2003 : Le module permet d'éviter maintenant que AOL déconnecte après 15 minutes d'innactivité.
Correction d 'un bug lié à un timer qui ne se déchargait pas, empéchant AOL de se reconnecté en cas de détection de déconnexion par la fonction chargée de la surveillance.
Ajout d'un zip contenant une form permettant l'utilisation du module (spéciale dédicasse à blabla!...).
- A venir : Utilisation d'une methode plus probante pour détecter la connexion à internet, en effet, pour le moment le module utilise le fait que AOL pense être connecté. Si AOL ne détecte pas qu'il est déconnecté, ce qui arrive..., bah le prog ne détecte pas non plus que l'ordinateur n'est plus connecté avec toutes les conséquences que ca peut avoir!...
: Gestion des Pseudonymes envisagée, le module actuel ne permet pas de détecter le login utilisé, ni de le changer...

Source / Exemple :


' ***************************************************************************** '
' Coder: Kryogen    Date: 29/01/2003    Site: http://www.chez.com/samisoffice/  '
' Module: Module permettant de gérer les connexions avec le client AOL          '
'   Ressources: Kernel32.dll, User32.dll, Rasapi32.dll                          '
' ***************************************************************************** '

' ***************************************************************************** '
' Déclaration des fonctions API nécessaires
    ' Général
        Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
        Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
        Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
        Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
    ' Opérations sur les fenetres
        Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
        Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
        Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
        Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
    ' Arret de processus
        Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
        Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
        Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
        Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
    ' Test connexion
        Declare Function RasEnumConnections Lib "RasApi32.dll" Alias "RasEnumConnectionsA" (lpRasConn As Any, lpcb As Long, lpcConnections As Long) As Long
        Public Declare Function RasGetConnectStatus Lib "RasApi32.dll" Alias "RasGetConnectStatusA" (ByVal hRasCon As Long, lpStatus As Any) As Long
        Private Type RasConn
            dwSize As Long
            hRasConn As Long
            szEntryName As String * 256
            szDeviceType As String * 16
            szDeviceName As String * 128
        End Type
' ***************************************************************************** '

' ***************************************************************************** '
' Déclaration des variables du module
    Public sAOLEtap As String               ' Contient l'état d'une connexion aol en cours
    Public sAOLErr As String                ' Contient une chaine en cas d'erreur
    Private Type tpAOLhWnds
        lAOLFram As Long                    ' Fenetre principale conetant la barre d'outils ainsi que la fenetre MDI
        lAOLMdi As Long                     ' Fenetre MDI permettant d'afficher l'ensemble des autres fenetres aol
        lAOLCxn As Long                     ' Fenetre permettant de rentrer les paramètres de connection
        lAOLPass As Long                    ' Texte permettant de rentrer le password aol
        lAOLPseud As Long                   ' Combo ou l'on peut choisir les pseudonymes aol
        lAOLMod As Long                     ' Fenetre affichant l'animation lors de la connection
        lAOLEtap As Long                    ' Texte donnant les étapes lors de la connection
        lAOLNoCxt As Long                   ' Fenetre apparessant seulement en cas d'erreur
        lAOLErr As Long                     ' Texte situé en haut de la fenetre d'erreur
        lAOLWantDeco As Long                ' Fenetre demandant si on souhaite se deconecter car ca fait longtemps qu'on a rien fait
        lAOLKeepCxn As Long                 ' Bonton "oui" dans la fenetre demandant si on veut se déconnecter apres 15 min...
    End Type
    Private AOLhWnds As tpAOLhWnds          ' Structure regroupant les handles des controles AOL
    Public Type tpAOLInf
        sAOLLogin As String                 ' Login et Password AOL associés
        sAOLPass As String
    End Type
    Public Type tpAOLPrms
        boAllTimCxn As Boolean              ' Paramètre spécifiant que la connexion doit être perpétuelle
        iMaxSecLapsAOLCxn As Integer        ' Paramètre spécifiant le temps de connexion maximum donné à AOL pour se connecter(en secondes)
        boHideFormAOL As Boolean            ' Paramètre permettant de cacher la fenetre principale d'AOL
        boHideModAOL As Boolean             ' Paramètre permettant de cacher la fenetre 'modal' d'AOL (celle ou les étapes sont afficher lors de la connexion)
        sRepAOL As String                   ' Paramètre spécifiant le répertoire d'AOL
        bNbAOLInfs As Byte                  ' Présice le nombre d'éléments dans le tableau dynamique AOLInf()
        AOLInf() As tpAOLInf                ' Paramètre donnant les infos de connexions proprement dite
        lLoopVerifNetCxn As Long            ' Paramètre définissant le laps de temps entre chaque vérification de la connection internet
        lTimAfterShell As Long              ' Paramètre permettant de régler le timing juste après le shell (en ms)
        lTimAfterPass As Long               ' Paramètre permettant de régler le timing juste après le pass (en ms)
        lTimEnd As Long                     ' Paramètre permettant de régler le timing à la fin de la connexion (en ms)
    End Type
    Public AOLPrms As tpAOLPrms             ' Contient les variables paramètres du module AOL
    Private lTimLoad As Long                ' Permet de savoir si le timer servant à la surveillance de connexion est déjà chargée et contien l'id de celui-ci (causait un bug: car le timer se chargait plusieurs fois entrainant des déconnexions intanpestives en appelant la procédure "DeCxtAOL" pleins de fois!)
' ***************************************************************************** '

' *******************************************************************************
' Fonction permettant de demander une connection AOL
'   Return: 0, l'ordinateur est connecté à internet avec aol ou par un autre processus
'   Return: 1, fichier executable d'AOL est introuvable!
'   Return: 2, le lancement de l'éxecutable AOL n'a pas réussi
'   Return: 3, la fonction n'a pas retrouvé l'handle du champs Password d'AOL
'   Return: 4, AOL a dépassé le laps de temps pour se connecter, il a été fermé!
'   Return: 5, AOL a retourné une erreur après avoir essayé de se connecter
    Public Function CxtAOL() As Byte
        Dim dTim As Double
        Dim lPrm As Long
        ' Vérifie si on est pas déja connecté
            If (GetStNetCxn()) Then GoTo FinFunction
        ' Vérification le fichier exe d'AOL existe bien
            If (Dir(AOLPrms.sRepAOL & "aol.exe", vbNormal) = "") Then
                CxtAOL = 1
                GoTo FinFunction
            End If
        ' Lancement du processus AOL (aol.exe ou waol.exe)
            If (AOLPrms.boHideFormAOL) Then
                lPrm = vbHide
            Else
                lPrm = vbNormalFocus
            End If
            If (Shell(AOLPrms.sRepAOL & "aol.exe", lPrm)) Then
                ' Affiche-Cache la fenetre principale d'AOL sur demande
                    If (AOLPrms.boHideFormAOL) Then
                        Call ShowWindow(AOLhWnds.lAOLFram, vbHide)
                    Else
                        Call ShowWindow(AOLhWnds.lAOLFram, vbNormalFocus)
                    End If
                ' Récupération des handles courant des controles AOLs
                    DoEvents
                    Call GetAOLHwnds
            Else
                CxtAOL = 2
                GoTo FinFunction
            End If
        ' Attente permettant d'être sur que la fenetre AOL est compétement chargée
            Sleep (AOLPrms.lTimAfterShell)
        ' Envoie le mot du pass dans le champ password et validation
            If (AOLhWnds.lAOLPass) Then
                Call SendChars(AOLhWnds.lAOLPass, AOLPrms.AOLInf(0).sAOLPass & vbCrLf)
            Else
                CxtAOL = 3
                GoTo FinFunction
            End If
        ' Attente permettant d'être sur que le pass est bien pris en compte par AOL
            DoEvents
            Sleep (AOLPrms.lTimAfterPass)
        ' Récupération des nouveau handles des controles AOLs
            Call GetAOLHwnds
        ' Affiche-Cache la fenetre 'modal' (où s'affiche les étapes de la connexion)
            If (AOLPrms.boHideModAOL) Then
                Call ShowWindow(AOLhWnds.lAOLMod, vbHide)
            Else
                Call ShowWindow(AOLhWnds.lAOLMod, vbNormal)
            End If
        ' Attent que la fenetre 'Modal' soit déchargée part AOL, (ce qui indique que AOL a fini de se connecté)
            While ((AOLhWnds.lAOLMod <> 0))
                ' Attente afin de ne pas saturer le processeur inutilement
                    DoEvents
                    Sleep (100)
                ' Raffraichissement des handles des controles AOLs pour la détection du déchargement de la fenetre 'Modal'
                    Call GetAOLHwnds
                ' Raffraichissement de la variable permettant d'obtenir les étapes
                    sAOLEtap = GetCtrlCap(AOLhWnds.lAOLEtap)
                ' Teste si le temps de connexion n'est pas dépassé
                    If (AOLPrms.iMaxSecLapsAOLCxn <> 0) Then
                        If (AOLPrms.iMaxSecLapsAOLCxn > dTim) Then
                            dTim = dTim + 0.1
                        Else
                            ' Arret de la procédure de connexion d'AOL
                                Call DeCxtAOL
                                CxtAOL = 4
                                GoTo FinFunction
                        End If
                    End If
            Wend
        ' Attente permettant d'être sur que AOL a fini les opérations à éffectuer.
            Sleep (AOLPrms.lTimEnd)
            DoEvents
            Call GetAOLHwnds
        ' Récupération du message d'erreur si il y a
            If (AOLhWnds.lAOLErr) Then
                sAOLErr = GetCtrlCap(AOLhWnds.lAOLErr)
                CxtAOL = 5
                GoTo FinFunction
            End If
FinFunction:
        ' Lancement de la surveillance de connexion si nécessaire pour se reconnecter si ca plante
            If ((AOLPrms.boAllTimCxn) And (boTimLoad = 0)) Then
                lTimLoad = SetTimer(0, 0, AOLPrms.lLoopVerifNetCxn, AddressOf ReCxnIfNoNet)
            End If
    End Function
' *******************************************************************************

' *******************************************************************************
' Procédure permettant d'arreter les processus et tous les threads d'AOL
    Public Sub DeCxtAOL()
        Dim hProcess As Long
        Dim nProcessId As Long
        ' Déchargement du timer si nécessaire
            If (KillTimer(0, lTimLoad)) Then lTimLoad = 0
        ' Mise à jour de l'handle de la fenetre principale d'AOL
            Call GetAOLHwnds
        ' Récupération du numéro du processus waol.exe à partir de l'handle de la fenetre
            Call GetWindowThreadProcessId(AOLhWnds.lAOLFram, nProcessId)
        ' Demande de fermeture du processus via son identificateur
            hProcess = OpenProcess(&H1F0FFF, False, nProcessId)
            Call TerminateProcess(hProcess, 99)
            Call CloseHandle(hProcess)
    End Sub
' *******************************************************************************

' *******************************************************************************
' Fonction permettant de rechercher le répertoire AOL automatiquement (testé uniquement avec AOL v7 installation par default sur XP)
'   Retour: Retourne le chemin vers le répertoire AOL si réussie si non vbnullstring
    Public Function AutoSrchAOLPath() As String
        Dim sBuf As String
        Dim sRep As String
        sBuf = Space(255)
        lRep = GetWindowsDirectory(sBuf, Len(sBuf))
        If (lRep > 0) Then
            sRep = Dir(Left(sBuf, 3) & "Program Files\AOL*", vbDirectory)
            If (sRep <> "") Then
                AutoSrchAOLPath = Left(sBuf, 3) & "Program Files\" & sRep & "\"
            End If
        End If
    End Function
' *******************************************************************************

' *******************************************************************************
' Fonction permettant de savoir si l'ordinateur est connecté à internet
'   Retour: Vrai si connecté à internet
    Public Function GetStNetCxn() As Boolean
        Dim lpRasConn(255) As RasConn
        Dim Ret As Long
        Dim lSt As Long
        lpRasConn(0).dwSize = 412
        lpcConnections = 0
        Ret = RasEnumConnections(lpRasConn(0), 105472, lpcConnections)
        If ((Ret = 0) And (lpcConnections > 0)) Then GetStNetCxn = True
    End Function
' *******************************************************************************

' *******************************************************************************
' Procédure permettant la surveillance de la connection au net
    Private Sub ReCxnIfNoNet()
        ' Vérification si l'ordinateur est encore connecté à internet
            If (GetStNetCxn = False) Then
                ' Reconnexion nécessaire car ordinateur déconnecté d'internet
                    ' Fermeture d'AOL
                        Call DeCxtAOL
                    ' Attente permettant le déchargement complet d'AOL
                        Sleep (2000)
                    ' Réouverture du logiciel et reconnexion
                        Call CxtAOL
            End If
        ' On regarde si y a pas la tite fenetre pour empecher que AOL dise "Vous avez été deco pour des raisons de sécurité!" (mon oeil! lol pour faire des économies OUI!)
            ' On rafraichi encore les handles pour voir si la fenetre est là...
                Call GetAOLHwnds
            ' On concerve la connexion en répondant "oui" en simulant l'appuie de la touche enter sur la fenetre
                If (AOLhWnds.lAOLKeepCxn) Then Call SendChars(AOLhWnds.lAOLKeepCxn, vbCrLf)
    End Sub
' *******************************************************************************

' *******************************************************************************
' Procédure permettant de récupérer les handles des fenetres (ou controles) générés par AOL
    Private Sub GetAOLHwnds()
        AOLhWnds.lAOLFram = FindWindow("AOL Frame25", "AOL")
        If (AOLhWnds.lAOLFram) Then
            AOLhWnds.lAOLMdi = FindWindowEx(AOLhWnds.lAOLFram, ByVal 0&, "MDIClient", vbNullString)
            AOLhWnds.lAOLCxn = FindWindowEx(AOLhWnds.lAOLMdi, ByVal 0&, "AOL Child", "Connexion")
            AOLhWnds.lAOLNoCxt = FindWindowEx(AOLhWnds.lAOLMdi, ByVal 0&, "AOL Child", "La connexion a échoué")
            AOLhWnds.lAOLWantDeco = FindWindowEx(AOLhWnds.lAOLMdi, ByVal 0&, "AOL Child", "Sans titre")
            AOLhWnds.lAOLPass = FindWindowEx(AOLhWnds.lAOLCxn, ByVal 0&, "_AOL_Edit", vbNullString)
            AOLhWnds.lAOLPseud = FindWindowEx(AOLhWnds.lAOLCxn, ByVal 0&, "_AOL_Combobox", vbNullString)
            AOLhWnds.lAOLKeepCxn = FindWindowEx(AOLhWnds.lAOLWantDeco, ByVal 0&, "_AOL_Icon", vbNullString)
        End If
        If (AOLhWnds.lAOLNoCxt) Then AOLhWnds.lAOLErr = FindWindowEx(AOLhWnds.lAOLNoCxt, ByVal 0&, "_AOL_Static", vbNullString)
        AOLhWnds.lAOLMod = FindWindow("_AOL_Modal", vbNullString)
        If (AOLhWnds.lAOLMod) Then
            AOLhWnds.lAOLEtap = FindWindowEx(AOLhWnds.lAOLMod, ByVal 0&, "_AOL_Static", vbNullString)
        End If
    End Sub
' *******************************************************************************

' *******************************************************************************
' Fonction permettant d'envoyer des caractères à un controle spécifique (testée pour toutes les lettres et espace)
' lHwndCtrl: Handle du controle ou il faut envoyer les caractères
' sChars: String contenant tous les caractères à envoyer
'   Retour: True si réussi,False sinon!
    Private Function SendChars(lHwndCtrl As Long, sChars As String) As Boolean
        Dim iNChar As Integer
            For iNChar = 1 To Len(sChars) Step 1
                If (PostMessage(lHwndCtrl, &H102, Asc(Mid(sChars, iNChar, 1)), 0) = 0) Then Exit Function
                DoEvents
            Next iNChar
            SendChars = True
    End Function
' *******************************************************************************

' *******************************************************************************
' Fonction permettant de trouver le texte d'un controle par exemple le caption d'une fenetre
' lHwndCtrl: Handle du controle ou il faut trouver le caption
'   Retour: le texte du caption si trouvé sinon nullstring
    Private Function GetCtrlCap(lHwndCtrl As Long) As String
        Dim sBuf As String
        Dim lSiz As Long
        sBuf = Space(256)
        lSiz = GetWindowText(lHwndCtrl, sBuf, Len(sBuf))
        If (lSiz > 0) Then GetCtrlCap = Left(sBuf, lSiz)
    End Function
' *******************************************************************************

Conclusion :


J'éspère que cela pourra servir, je vois déjà les rabajois de première me dire: "Y a déjà ca, ici"... Mais bon, je suis heureux d'aporter ma pierre à l'édifice.
Note: En fait, ce module est la racine principale d'un logiciel qui permettra à mon serveur de se connecter à internet sans intervention extérieur... De plus la version finale de l'application permettra à des clients (mes ordinateurs composant mon réseau) de demander une connexion ou une deconnection selon mes désirs...
Le coup de gueule: En fait, tout ca pour ne plus être emmerdé à l'avenir par AOL et être toujours connecté... En bref, pouvoir enfin bénéficier d'un forfait illimité sur tout mes ordinateurs en même temps. Et surtout ne plus entendre quand on est plongé dans une page interessante "Au revoir" "Au revoir"!!!...... Ceux qui connaissent comprendront! lol
Voilà, par ici, les commentaires, rapport de bugs, et tite note aussi! lol merci pour ce qu'il l'on déjà fait!

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.