Получить текст с помощью SendMessage () C ++ - PullRequest
2 голосов
/ 27 апреля 2011

Я пытаюсь получить текст из текстового поля в определенном окне.Для этого я использую функцию SendMessage Api, я не знаю, является ли это основным способом:

SendMessage(hwnd, WM_GETTEXT, 0, 0);

Но я не знаю, как напечатать текст.Для аргумента 3 и 4 на сайте msdn написано: Дополнительная информация, специфичная для сообщения.Так что я не знаю, если мне нужно передать что-то еще, кроме 0. Я пробовал это также:

SendMessage(hwnd, WM_GETTEXT, sizeof(text), LPARAM(text));

Но он печатает имя текстового поля, мне нужно получить текст внутри поля?
Как я могу это сделать?Является ли SendMessage () правильной функцией API для использования?

Спасибо.

edit:

Я опускаю, чтобы сказать, я перечисляю дочерние окна из окна, и для меня это выглядит как текстовое поле, где у вас естьнабрать имя.Я получаю имя пользователя окна мгновенных сообщений, поэтому не могу сравнить его со строкой, это текстовое поле?

Ответы [ 3 ]

5 голосов
/ 27 апреля 2011

Прочитайте документацию MSDN еще раз.Он НЕ говорит «Дополнительная информация, специфичная для сообщения» для этих параметров:

wParam Максимальное количество копируемых символов, включая завершающий нулевой символ.

Прикладные программы ANSI могут иметь уменьшенную в размерах строку в буфере (минимум до половины значения wParam) из-за преобразования из ANSI в Unicode.

lParam Указатель на буфер, который должен получить текст.

5 голосов
/ 27 апреля 2011

Вы должны использовать GetWindowText .Больше информации здесь .

1 голос
/ 20 апреля 2013

Этот код работает только для местных пользователей:

char *szText;
szText = (char *)GlobalAlloc(GPTR, 255);
SendMessage(hEditControl, WM_GETTEXT, 255, (LPARAM)szText);
MessageBox(hWnd, szText, "It's your message", MB_OK | MB_TOPMOST);
GlobalFree((HGLOBAL)szText);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...