Module d'envoi de texte sur les salons aol + explications (toutes versions) (apis findwindow et sendmessage)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 769 fois - Téléchargée 45 fois

Contenu du snippet

Pour ceux qui veulent faire leur petit prog aol, j'essaye d'expliquer comment ça marche :]

Source / Exemple :


' Fonction Chatsend détaillée et commentée

Option Explicit

'-------------------------------------
' déclarations des APIs
'-------------------------------------

Private Declare Function FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String)
Private Declare Function FindWindowEx& Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String)
Private Declare Function SendMessageString& Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String)
Private Declare Function SendMessageLong& Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)

'-------------------------------------
' déclarations des constantes
'-------------------------------------

Private Const WM_SETTEXT = &HC
Private Const WM_GETTEXT = &HD
Private Const WM_GETTEXTLENGTH = &HE
Private Const WM_CHAR = &H102
Private Const VK_RETURN = &HD

Public Function ChatSend(ByVal Txt As String)

On Error Resume Next

Dim Room As Long, Rich As Long, Rich2 As Long, GetTrim As Long, Min As Single
Dim Aol As Long, MDI As Long, Child As Long, List As Long, Texte As String
Dim AOLIcon As Long, ZTxt As Long, TrimSpace As String, GetString As Long

Aol& = FindWindow("AOL Frame25", vbNullString) ' on récupère le handle de la fenêtre principale d'AOL
MDI& = FindWindowEx(Aol&, 0&, "MDIClient", vbNullString) ' puis celui de la MDI

'-------------------------------------
' recherche de la fenêtre du salon AOL
'-------------------------------------

    Child& = FindWindowEx(MDI&, 0&, "AOL Child", vbNullString) ' 1er AOL Child
    Rich& = FindWindowEx(Child&, 0&, "RICHCNTL", vbNullString) ' on cherche le handle de "RICHCNTL" sur le 1er AOL Child
    List& = FindWindowEx(Child&, 0&, "_AOL_Listbox", vbNullString) ' idem pour une "_AOL_Listbox"
    AOLIcon& = FindWindowEx(Child&, 0&, "_AOL_Icon", vbNullString) ' puis pour une "_AOL_Icon"
    ZTxt& = FindWindowEx(Child&, 0&, "_AOL_Static", vbNullString) ' enfin une zone "_AOL_Static"

If Rich& <> 0& And List& <> 0& And AOLIcon& <> 0& And ZTxt& <> 0& Then ' si tous les éléments sont présents sur le AOL Child

    Room& = Child& ' on a trouvé la fenêtre du salon et on place son handle dans la variable Room&

Else 'sinon

    Do
        Child& = FindWindowEx(MDI&, Child&, "AOL Child", vbNullString) ' on refait la même chose avec le AOL Child suivant (FindWindowEx(MDI&,Child& <- là on signale qu'on prend la suivante)
        Rich& = FindWindowEx(Child&, 0&, "RICHCNTL", vbNullString)
        List& = FindWindowEx(Child&, 0&, "_AOL_Listbox", vbNullString)
        AOLIcon& = FindWindowEx(Child&, 0&, "_AOL_icon", vbNullString)
        ZTxt& = FindWindowEx(Child&, 0&, "_AOL_static", vbNullString)

        If Rich& <> 0& And List& <> 0& And AOLIcon& <> 0& And ZTxt& <> 0& Then ' si tous les éléments sont trouvés

            Room& = Child& ' alors on place le handle dans la variable Room&
            
        End If
        
    Loop Until Child& = 0& ' on continue tant que l'on est pas arrivé au dernier AOL Child (plus d'AOL Child renvoie 0&)

End If

If Room& = 0& Then Exit Function 'si on a pas trouvé la fenêtre du salon alors on termine la fonction

'-------------------------------------
' recherche de la zone de texte
'-------------------------------------

Rich& = FindWindowEx(Room&, 0&, "RICHCNTL", vbNullString) ' on prend la 1ère "RICHCNTL" (-> richtextbox AOL) qui correspond à la zone de saisie sur AOL7
Rich2& = FindWindowEx(Room&, Rich&, "RICHCNTL", vbNullString) ' on prend la suivante qui correspond à la zone de saisie sur les autres versions d'AOL

If Rich2& = 0 Then Rich2& = Rich& ' si la "RICHCNTL" 2 renvoie 0 on est donc sur AOL7, on va envoyer les messages sur la 1ère "RICHCNTL"

'-------------------------------------
' récupération du texte de la zone de saisie
'-------------------------------------

GetTrim& = SendMessageLong(Rich2&, WM_GETTEXTLENGTH, 0&, 0&) ' on utilise un SendMessageLong avec la constante WM_GETTEXTLENGTH qui va renvoyer la longueur du texte et placer le résultat dans GetTrim&
TrimSpace$ = Space$(GetTrim&) ' on crée l'espace mémoire nécéssaire au stockage du texte dans TrimSpace$ (->taille de GetTrim&)
GetString& = SendMessageString(Rich2&, WM_GETTEXT, GetTrim + 500, TrimSpace$)
Texte$ = TrimSpace$ ' on place le texte récupéré dans la variable Texte$

'-------------------------------------
' vérification de la présence de texte dans la zone de saisie
'-------------------------------------

Do
    GetTrim& = SendMessageLong(Rich2&, WM_GETTEXTLENGTH, 0&, 0&) ' on récupère le texte de la zone de saisie
    TrimSpace$ = Space$(GetTrim)
    GetString& = SendMessageString(Rich2&, WM_GETTEXT, GetTrim + 500, TrimSpace$)
    Texte$ = TrimSpace$
    DoEvents ' on passe la main au système (pour éviter de bloquer les ressources pendant la boucle)
    
Loop Until Texte$ = "" ' on attend tant que la zone de saisie contient du texte

Min = Timer ' on utilise le mot clé Timer pour marquer une courte pause avant d'envoyer le texte
Do Until 0.7 <= Timer - Min
DoEvents
Loop

Call SendMessageString(Rich2&, WM_SETTEXT, 0&, Left(Txt$, 232)) ' on positionne les 232 premiers caractères à envoyer dans la zone de saisie
Call SendMessageLong(Rich2&, WM_CHAR, VK_RETURN, 0&) ' on simule l'appui de la touche ENTREE

If Len(Txt$) > 232 Then Call ChatSend(Right(Txt$, Len(Txt$) - 232)) ' si le texte a envoyer fait plus de 232 caractères on recommence avec la suite du texte

End Function

A voir également

Ajouter un commentaire Commentaires
cs_Aspect Messages postés 47 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 23 mars 2004 1
4 juin 2010 à 11:51
le bon vieux temps !! :D
bob6664569 Messages postés 11 Date d'inscription dimanche 20 octobre 2002 Statut Membre Dernière intervention 8 juin 2006
26 mars 2008 à 19:50
bob6664569 Messages postés 11 Date d'inscription dimanche 20 octobre 2002 Statut Membre Dernière intervention 8 juin 2006
26 mars 2008 à 19:47
... En tout cas ça m'envoie toujours des mails quand on poste des commentaires sur des sources qui datent de Mathusalem.
thedjpredator Messages postés 19 Date d'inscription dimanche 20 janvier 2002 Statut Membre Dernière intervention 27 mars 2008
26 mars 2008 à 18:31
[Dsl aucun rapport avec la source enfin si un tit peu]

y'en 'core des gens des salons waol qui passent ici?
perpette que j'me suis pa co sur aol ou aim
si ya des gens du pdr ou de phuk
ça fré plaiZz d'savoir ske tlm est devenu lol ;)
cs_heine Messages postés 58 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 novembre 2006
5 sept. 2005 à 15:09
Souvenirs souvenirs.... :D
Afficher les 14 commentaires

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.