API windows

cs_rivaldinho Messages postés 28 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 23 avril 2009 - 9 févr. 2009 à 15:50
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 10 févr. 2009 à 21:48
Salut, j'utilise ce bout de code pour récupérer en temps réel le texte écrit sur notepad:


HWND hWnd, hWnd2; // Handles de fenêtre

    DWORD size, size2; // Taille du texte

    int i=0;

    char *pBuff=NULL; // Buffer de sortie

    //line pLigne;

  

    bool flag=true;


size=0;

debut:

    while (flag)

         {

            hWnd = FindWindow(NULL,TEXT("Essai - Notepad"));  // Titre du notepad : Essai

            if (hWnd)    //Si on l'a trouvé

                {

                hWnd2=FindWindowEx(hWnd,0,TEXT("Edit"),NULL); // Edit du notepad

     

                // Récupération de la taille de la chaine et allocation du buffer en conséquence

                size=SendMessage(hWnd2,WM_GETTEXTLENGTH,0,0);

                if(size==0)

                    {

                    flag=true;

                    goto debut;

                    }

                Else flag = false;

                    

                pBuff=(char *)malloc(size);

           

                // Get du texte

                SendMessage(hWnd2,WM_GETTEXT,size,(DWORD)pBuff);

       

                }


Le probleme c'est que la fonction ne fonctionne pas toujours et une
fois sur deux la fonction me retourne un size de 0 alors quil y a du
texte dans le notepad. Est-ce qulqu<un aurait une idéedu probleme??

4 réponses

romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 1
9 févr. 2009 à 16:34
Bonjour,

dans ton code je vois la fonction goto, on ma toujours dit que cette fonction était a bannir en c/cpp. Par contre tu peux remplacer ton goto par une boucle for ou bien même une boucle while.
Essai d'en tenir compte et tiens moi au courant !

Bonne fin de journée

Romain
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
9 févr. 2009 à 18:35
Salut,

romain60112 -> En programmation, il y a effectivement des pratiques considérées comme bonne ou mauvaise. L'usage du goto est souvent déconseillé dans le domaine universitaire, et mal considéré par les analyseurs automatiques de la qualité du code.

Néanmoins, il n'y a pas unanimité pour ce qui est du goto, qui n'est pas exempt d'avantages dans certains cas.

Lire ce thread qui a dérivé sur le thème du goto.

rivaldinho -> Tes derniers messages ont tous le même titre, mais ne parle pas de la même chose, même s'il s'agit effectivement d'API Windows. Tu pourrais essayer d'être un peu plus précis, style [API Windows]Retour invalide lors de l'envoie d'un WM_GETTEXT à notepad. Encore que je suis peut être le seul à être fan des [].

Concernant ton problème... Première piste, l'adresse que tu fournis pour réceptionner le titre doit être valable dans le processus DISTANT.

Il faut que l'allocation se fasse dans le processus DISTANT (VirtualAllocEx), que tu envoie le message, que tu recopies la valeur du processus DISTANT vers le processus (ReadProcessMemory), que tu libère la zone allouée dans le processus distant (VirtualFreeEx).
cs_rivaldinho Messages postés 28 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 23 avril 2009
9 févr. 2009 à 21:00
Le probleme n'est pas dans l'allocation de la mémoire mais bien à la ligne :
hWnd2=FindWindowEx(hWnd,0,TEXT("Edit"),NULL); // Edit du notepad
où il ne trouve pas le handle dans notepad de la zone de texte??
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
10 févr. 2009 à 21:48
Ah bon. Au fait, pour voir un peu comment retrouver une fenêtre par programme, utiliser spy++, fourni avec Visual Studio, c'est bien pratique.

Pour la zone de texte de notepad, j'avais fait ça en speed.
Rejoignez-nous