c - 如何在 ListView 控件中查找项目?

标签 c winapi listview ipc

我的 ListView 包含 3 列姓名、地址和电话号码。

我想检索特定名称的索引。

我正在使用 ListView_FindItem 宏来查找索引号,但是当我的代码执行到这一行时,它使程序崩溃。

它只是说 Payroll 已停止工作。 Windows 可以联机检查问题的解决方案。

我确定我已将右句柄传递给 ListView_FindItem 宏,但我不确定 LVFINDINFO 结构。

这是我的代码

WCHAR szProcess[80] = {0};
LVFINDINFO item = {LVFI_STRING, (LPCTSTR) szProcess};

//code to find parent handles
...

//code to find index
index = ListView_FindItem(hwndListView, -1, &item);

我不确定 LVFI_STRING 标志,我什至尝试将常量 LVFINDINFO 结构传递给 ListView_FindItem 宏,但我的程序仍然崩溃.

Note : The above code is not part of the payroll application. I mean to say the payroll application has the listview and I'm trying to search the item from other application.

有人能给我指出正确的方向吗?

谢谢。

最佳答案

您的描述有点不清楚,但我认为您正在向不同进程中的窗口发送 LVM_FINDITEM 消息(通过 ListView_FindItem() 宏)。

这对这个特定的 Windows 消息根本不起作用,因为它传递了一个指向调用进程中的结构的指针,当在其他进程(拥有 ListView 的工资单应用程序)的上下文中解释时,该结构毫无意义。

要解决您的问题,您可以在其他进程中分配内存,尽管这是一项相当复杂的任务。在代码项目文章 Stealing Program's Memory 中可以找到该技术的一个常被引用的示例。 .

也许更简单的方法是使用 WM_COPYDATA,它将在进程之间编码字符串数据。如果这没有足够的灵 active ,那么您需要找到另一种 IPC 机制,例如命名管道。

关于c - 如何在 ListView 控件中查找项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688927/

相关文章:

c - C 中传递指针

c - winapi:SetFocus() 可以无错误地返回 NULL 吗?因为这就是我在实现焦点恢复时所看到的 a la recent oldnewthing post

android - 异步更改 ListView 中的特定项目

c# - 如何以编程方式选择 ListView 项目?

android - 为什么 ListView 项目不会增长来包装它们的内容?

c - c 中整数的环绕

c - 通过CGO传递结构

c - malloc 比声明更好吗?

c++ - 在 WM_MOUSEMOVE 中拖动并绘制边框?

c++ - 如何防止应用程序被执行?