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!
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.