cs_rivaldinho
Messages postés28Date d'inscriptionjeudi 15 janvier 2009StatutMembreDernière intervention23 avril 2009
-
9 févr. 2009 à 15:50
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDerniè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??
romain60112
Messages postés70Date d'inscriptionmercredi 1 octobre 2008StatutMembreDernière intervention17 avril 20131 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 !
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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.
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és28Date d'inscriptionjeudi 15 janvier 2009StatutMembreDernière intervention23 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??