я использую ListView_GetItemText
сюда:
int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048]; //Init buffer
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function
LPWSTR itemtxt = buffer; //Create LPWSTR var
stringstream s;
s << itemtxt;
MessageBoxA(NULL, s.str().c_str(), NULL, NULL);
Sleep(7000); //Sleep because this piece of code is inside a While loop
Функция MessageBox показывает это:
Что мне нужно, это получить весь текст строки, но, кажется, я получаю шестнадцатеричную строку …
std::stringstream
лечит wchar_t*
указатель как общий указатель и, таким образом, хранит значение указателя вместо символов, на которые он указывает.
Если вы хотите использовать MessageBoxA
нужно конвертировать wchar_t
данные в ANSI.
int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048] = {0}; //Init buffer
char buffer_ansi[2048 * 2] = {0};
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function
WideCharToMultiByte(CP_ACP, 0, buffer, -1, buffer_ansi, sizeof(buffer_ansi), NULL, NULL);
stringstream s;
s << buffer_ansi;
MessageBoxA(NULL, s.str().c_str(), NULL, 0);
Обновление: вы не должны использовать NULL
за четвертый аргумент MessageBoxA
, который не является указателем.
Обновление 2: вместо преобразования строки в ANSI, используя std::wstringstream
вместо std::stringstream
и позвоните MessageBoxW()
вместо MessageBoxA()
,
int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048] = {0}; //Init buffer
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function
std::wstringstream s;
s << buffer;
MessageBoxW(NULL, s.str().c_str(), NULL, 0);
Примечание: у вас есть комментарий «Буфер инициализации», поэтому инициализировать буфер.
Обновление 3: или просто не используйте std::wstringstream
совсем.
int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048] = {0}; //Init buffer
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function
MessageBoxW(NULL, buffer, NULL, 0);
Других решений пока нет …