gpt4 book ai didi

c++ - 如果目标应用程序在 C++ 中崩溃,则无法使用 LVM_GETITEMTEXT

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:47 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 dword ptr [esi],1

最佳答案

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

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

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

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