Erreur EM_GETLINE C ++ Obtenir la dernière ligne de la zone de texte

J’ai un problème mineur avec EM_GETLINE. J’ai une zone de texte dont je veux extraire le texte. La boîte continue à se mettre à jour tout le temps (c’est un fichier journal qui continue à se mettre à jour, dernier message en bas). Tout ce que je veux, c’est cette dernière ligne.

Mon code:

HWND hwnd = (HWND)0x00020A72; TCHAR param[1000]; char display[1000]; LONG lResult; lResult = SendMessage( hwnd, WM_GETTEXT, 500, (LPARAM)param); //lResult = SendMessage( hwnd, EM_STREAMOUT, SF_RTF, (LPARAM)param); //lResult = SendMessage( hwnd, EM_GETLINE, 1, (LPARAM)param); wcstombs(display, param, 1000); printf( " %s\n", display ); 

Comme vous pouvez le constater, j’ai essayé WM_GETTEXT (ça marche). Lorsque GETLINE est utilisé, il comstack nice (VS2010express) mais renvoie des déchets.

Serait vraiment reconnaissant de l’aide. Merci pour l’écoute.

Cette fenêtre appartient à un autre processus, non? Je peux vous voir coder en dur la poignée de la fenêtre. Pas si sûr que le message soit automatiquement marshalé au-delà des limites du processus, seul le message système est (WM_Xxx <0x400).

Le marshaling vous-même nécessite OpenProcess, VirtualAllocEx pour allouer le tampon, WriteProcessMemory pour l’initialiser, SendMessage, ReadProcessMemory pour lire le tampon. De plus nettoyage.

Vous devriez demander la dernière ligne, pas la première, et append le NULL pour la fin, essayez ce qui suit:

 int last_line = SendMessage(hwnd, EM_GETLINECOUNT,0 ,0) - 1; int size = SendMessage(hwnd, EM_GETLINE, (WPARAM)last_line, (LPARAM)param); param[size] = 0;//EM_GETLINE does not add the NULL 

“Pointeur long sur le tampon qui reçoit une copie de la ligne. Le premier mot du tampon spécifie le nombre maximal de caractères pouvant être copiés dans le tampon” http://msdn.microsoft.com/en-us/library/ aa921607.aspx

 *(WORD*) param = 1000