gpt4 book ai didi

c++ - 在 C++ 中获取 Windows 文本?

转载 作者:行者123 更新时间:2023-11-28 05:45:41 34 4
gpt4 key购买 nike

你好,最近我一直在用 C++ 编程。请注意,我使用正在检查的 -std=c++11 进行编译,并将 Code::Blocks 与 MingW 编译器一起使用,因为某些程序需要它。

我的问题很简单:任何人都可以提供一个函数来获取输入栏的文本吗?我问这个是因为我似乎找不到 WM_GETTEXT 或 GetWindowText 的有效实现。

编辑:

我有这些错误:

||=== Build: Release in ElitezLua (compiler: GNU GCC Compiler) ===| C:\Users\PC\Desktop\ElitezLua\Main.cpp||In function 'std::string GetText(HWND, int)':| C:\Users\PC\Desktop\ElitezLua\Main.cpp|35|error: cannot convert 'wchar_t*' to 'LPSTR {aka char*}' for argument '2' to 'int GetWindowTextA(HWND, LPSTR, int)'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 4 second(s)) ===|

使用这段代码:

string GetText(HWND Box, int THN) {
int Length = GetWindowTextLength(GetDlgItem(Box, THN));
wchar_t * Text = new wchar_t[Length + 1];
return GetWindowText(GetDlgItem(Box, THN), Text, (Length + 1));
};

(错误在返回线上)

最佳答案

string GetText(HWND Box, int THN) 
{
int Length = GetWindowTextLength(GetDlgItem(Box, THN));
wchar_t * Text = new wchar_t[Length + 1];
return GetWindowText(GetDlgItem(Box, THN), Text, (Length + 1));
};

上面的代码有几个错误:

  • 1,混合 ANSI/Unicode

  • 第二,由于 new char_t[] 导致内存泄漏。

  • 第三,当需要 std::string 时返回 int

让我们从一些简单的事情开始:

wchar_t Text[300] = {0};
GetWindowTextW(GetDlgItem(Box, THN), Text, 300);
MessageBoxW(0, Text, 0, 0);

这应该始终有效,因为长文本长度小于 300(否则它会被截断)这足以获取按钮名称,或从一个小的编辑框中获取文本。

函数末尾的 W 强制使用 Unicode。或者您可以在 cpp 文件顶部添加 #define UNICODE

#define UNICODE
#include <Windows.h>

...
int len = GetWindowTextLen(GetDlgItem(Box, THN));
if (len > 0)
{
//add 1 for null-terminating char
len += 1;
wchar_t Text *new wchar_t[len];
GetWindowText(GetDlgItem(Box, THN), Text, len);
MessageBox(0, Text, 0, 0);
delete[]Text;
}

接下来,您可以将其放入函数中以返回 std::wstring

std::wstring foo()
{
std::wstring::str;
int len = GetWindowTextLen(GetDlgItem(Box, THN));
if (len > 0)
{
len += 1;
wchar_t Text *new wchar_t[len];
GetWindowText(GetDlgItem(Box, THN), Text, len);
str = text;
delete[]Text;
}
return str;
}

一旦掌握了它,您就可以直接使用 std::wstring:

std::wstring foo()
{
int len = 1 + GetWindowTextLength(GetDlgItem(Box, THN));

//initialize a string large enough to read data
std::wstring str(len, L'\0');
GetWindowText(GetDlgItem(Box, THN), &str[0], len);
return str;
}

关于c++ - 在 C++ 中获取 Windows 文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36267579/

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