gpt4 book ai didi

c++ - 无法在 C++ 中使用 LVM_GETITEMTEXT 而不导致目标应用程序崩溃

转载 作者:行者123 更新时间:2023-11-30 16:38:24 25 4
gpt4 key购买 nike

我正在尝试从另一个应用程序的 SysListView32 类(根据 Spy++)捕获数据。向此句柄发送 LVM_GETITEMCOUNT 消息始终返回正确的项目数。有一个子窗口 SysHeader32,大概包含标题标题。

当我尝试向目标应用程序发送 LVM_GETITEMTEXT 消息时,它崩溃了。该消息的相关代码如下:

LPTSTR lpText;
LVITEM* lvItem;
lvItem = new LVITEM;
lvItem->iSubItem = 0;
lvItem->cchTextMax = 255;
lvItem->pszText = lpText;
//SysListViewHandle is the HWND to the SysListView32 'content' window
SendMessage(SysListViewHandle, LVM_GETITEMTEXT, 1, (long)lvItem);

列表中的每个“单元格”包含的文本不超过 50 个字符,因此最大文本大小应该没问题。

我希望从中获取数据的列表结构有 16 列和可变数量的条目(超过 5 个),因此 wParam 应该没问题。此列表使用的样式为 WS_CHILDWINDOW、WS_VISIBLE、WS_TABSTOP、WS_HSCROLL、LVS_REPORT,以及扩展样式 WS_EX_LEFT、WS_EX_LTRREADING、WS_EX_RIGHTSCROLLBAR、WS_EX_NOPARENTNOTIFY、WS_EX_CLIENTEDGE、LVS_GRIDLINES 和 LVS_FULLROWSELECT。

UISpy 能够探测此列表并找到其中的实际数据,因此我认为使用消息就像在公园里散步一样简单,但事实证明并非如此 =/任何帮助将不胜感激。

编辑:值得一提的是崩溃时的错误日志是:applicationname.exe 中 0x77582b87 处出现未处理的异常:0xC0000005:写入位置 0x01bc48b0 时出现访问冲突。调用堆栈位置 comctl32.dll拆卸:77582B87 mov 双字指针 [esi],1

最佳答案

您的问题是,由于 ListView 存在于另一个进程中,因此您分配的内存在该其他进程中无效。我建议您引用article over at The Code Project它提供了一个解决方案。

此外,您似乎没有为 lpText 分配任何内存,因此它会在您自己的进程中失败。

关于c++ - 无法在 C++ 中使用 LVM_GETITEMTEXT 而不导致目标应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47502768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com