gpt4 book ai didi

c++ - SendMessage WM_GETTEXT 错误

转载 作者:行者123 更新时间:2023-11-30 04:05:19 34 4
gpt4 key购买 nike

我正在尝试编写一个程序来获取另一个程序的窗口名称。为此,我想将 SendMessage() 函数与 WM_GETTEXT 消息一起使用。但是我知道我可能做错了很多事情所以这是我使用的代码:

string text;
SendMessage(windowHandle, WM_GETTEXT, sizeof(text), LPARAM(text));

我很确定...我可能有很多错误。 LPARAM(text) 可能是完全错误的,因为在 MSDN 中它说这个参数是:指向接收文本的缓冲区的指针。

问题是...我不知道缓冲区是什么以及如何声明它...以及如何将其转换为带有其中窗口名称的字符串变量。

我得到的错误是:

error: invalid cast from type 'std::string {aka std::basic_string<char>}' to type 'LPA {aka long int}'

错误是针对带有 SendMessage 的行。所以我的问题是:

我做错了什么?什么是缓冲区?如何声明缓冲区?如何将该缓冲区转换为文本文件?如果有人可以向我展示执行我想要的操作的代码...那可能是我所能要求的最佳答案!

最佳答案

Win32 API 是一个 C api,你不能用它来使用 C++ 字符串。您需要改用 char 缓冲区:

char text[256];
LRESULT result = SendMessage(windowHandle, WM_GETTEXT, sizeof(text), LPARAM(text));

还有 sizeof(text) 当字符串的 text 不符合您的要求时。 sizeof 给出了一个使用的字节数,对于 string 来说不是缓冲区中的字符数,因为 string 动态分配其缓冲区.

最后将 string 转换为 LPARAM,这是一个整数没有任何意义。通常,无法将 C++ 对象转换为整数。

关于c++ - SendMessage WM_GETTEXT 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23348208/

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