Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中使用LVM_GETITEM和SendMessage获取LVITEM的文本_C_Listview_Listviewitem - Fatal编程技术网

在C中使用LVM_GETITEM和SendMessage获取LVITEM的文本

在C中使用LVM_GETITEM和SendMessage获取LVITEM的文本,c,listview,listviewitem,C,Listview,Listviewitem,我正在尝试从另一个进程的列表视图中读取文本。到目前为止,我已经能够得到行和列的计数。现在我想浏览每个单元格并阅读它。我做了一些研究,发现我需要使用SendMessage来获取每个单元格的LVITEM。我认为LVITEM.iItem必须是行#,而LVITEM.iSubItem必须是列#。还有,我将如何将文本输入到我的char*中。我看到了一些使用CString::GetBuffer的示例。但我是c语言的,所以我没有,有没有一个等价的或者其他的方法可以做到这一点 char* itemText; L

我正在尝试从另一个进程的列表视图中读取文本。到目前为止,我已经能够得到行和列的计数。现在我想浏览每个单元格并阅读它。我做了一些研究,发现我需要使用SendMessage来获取每个单元格的LVITEM。我认为LVITEM.iItem必须是行#,而LVITEM.iSubItem必须是列#。还有,我将如何将文本输入到我的char*中。我看到了一些使用CString::GetBuffer的示例。但我是c语言的,所以我没有,有没有一个等价的或者其他的方法可以做到这一点

char* itemText;

LVITEM itemInfo = {0};
itemInfo.iItem = r; // r is an int. this should be row # right?
itemInfo.iSubItem = c; // c is an int, this should be the column # right?
itemInfo.mask = LVIF_TEXT;
itemInfo.cchTextMax = 256;
itemInfo.pszText = itemText;
SendMessage(procList, 0x1005, 0, (LPARAM)&itemInfo);

因为包含文本的内存块属于另一个进程,所以您需要使用一些技巧将文本从进程封送到您的进程中

这是我在2004年写的一篇博客文章,展示了如何做到这一点。注意,您需要具有管理员权限才能执行此操作


好吧,看起来不难。谢谢但是,我如何选择要阅读的单元格,是像我在示例中显示的那样还是我做错了什么?@Lienau,是的,您使用iSubItem成员来指示您感兴趣的子项(列)。我建议您首先使用本地ListView让代码在自己的流程中工作,然后添加代码来处理封送处理,这样您就可以了解每一步的工作情况以及它何时中断。