【发布时间】:2015-11-09 14:10:24
【问题描述】:
我这样使用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不能从const wchar_t*转换为 ASCII(或 ANSI)字符串。你得到的输出是缓冲区的地址。 -
您知道列表视图窗口处于不同的进程吗?这会在某个时候烧伤你。为什么不使用 API 而不是破解 procmon 来获取数据?
-
@DavidHeffernan 你是什么API? Procmon 的命令行?这是相当有限的。你是对的,我正在尝试做某种“hack”,因为将 ListView 导出到支持文件,然后将支持文件转换为 XML 并不是我需要的解决方案。我已经获得了 ListView 的 HWND,我可以与项目交互(添加、删除、排序...),我只需要读取行...
-
所有信息都可以通过Windows API获取。以这种方式进行黑客攻击是令人讨厌的。我认为您需要跨流程边界编组子项目的数据。而且它可能不适用于所有版本的 Windows。查看 Process Hacker 的代码。
-
@DavidHeffernan 我还没有找到有关如何获取 Procmon 数据的信息。这就是为什么我要做那个“讨厌的”黑客,作为最后的资源。你知道在哪里可以找到它吗?谢谢。
标签: c++ listview winapi char items