我以这种方式使用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函数显示:
我需要的是获取行的整个文本,但似乎我得到了一个十六进制字符串......
答案 0 :(得分:1)
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:而不是使用std::wstringstream
而不是std::stringstream
将字符串转换为ANSI,而是调用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);
注意:你有评论“Init buffer”,所以初始化缓冲区。
更新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);