EM_GETLINE ошибка C ++ Получить последнюю строку из текстового поля - PullRequest
0 голосов
/ 03 сентября 2010

У меня небольшая проблема с EM_GETLINE. У меня есть текстовое поле, из которого я хочу извлечь текст. Ящик постоянно обновляется (это файл журнала, который постоянно обновляется, последнее сообщение внизу). Все, что я хочу, это самая последняя строка.

Мой код:

        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 );

Как видите, я пробовал WM_GETTEXT (это работает). При использовании GETLINE он хорошо компилируется (VS2010express), но возвращает мусор.

Был бы очень благодарен за помощь. Спасибо за прослушивание.

Ответы [ 3 ]

2 голосов
/ 03 сентября 2010

Это окно принадлежит другому процессу, верно? Я вижу, как вы жестко закодировали ручку окна. Не уверен, что сообщение автоматически маршалируется через границы процесса, только системное сообщение (WM_Xxx <0x400). </p>

Для маршалинга он сам требует OpenProcess, VirtualAllocEx для выделения буфера, WriteProcessMemory для его инициализации, SendMessage, ReadProcessMemory для чтения буфера. Плюс уборка.

1 голос
/ 03 сентября 2010

Вы должны запросить последнюю не первую строку и добавить NULL для завершения, попробуйте следующее:

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
0 голосов
/ 01 декабря 2014

«Длинный указатель на буфер, который получает копию строки. Первое слово буфера указывает максимальное количество символов, которое можно скопировать в буфер» http://msdn.microsoft.com/en-us/library/aa921607.aspx

*(WORD*) param = 1000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...