You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确获取Windows控件文本?现有代码返回父类名称该如何解决

问题原因

你定义的wchar_t* textOutput是未初始化的野指针,没有分配任何可写入的内存空间。GetWindowText执行时会直接向非法内存地址写入内容,最终读取到的是随机的内存数据,也就是你遇到的返回父类名称的异常情况。另外注意GetWindowTextLengthW返回的长度不包含字符串末尾的空终止符\0,分配内存时需要多预留1个字符的空间。

修复后的可运行代码

const wchar_t* textInput = L"Login";   

HWND btnHandle = CreateWindowEx(0, L"BUTTON", textInput, WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
                 mCoordinate.x, mCoordinate.y, mDimension.cx, mDimension.cy, parentHandle, NULL, 
                 (HINSTANCE)GetWindowLongPtr(parentHandle, GWLP_HINSTANCE), NULL);

int length = GetWindowTextLengthW(btnHandle);
if (length > 0) {
    // 额外预留1个字符空间存储空终止符
    wchar_t* textOutput = (wchar_t*)malloc((length + 1) * sizeof(wchar_t));
    if (textOutput != NULL) {
        GetWindowTextW(btnHandle, textOutput, length + 1);
        MessageBox(NULL, textOutput, L"Window Text", MB_OK);
        // 释放申请的堆内存,避免泄漏
        free(textOutput);
    }
}

简化方案

如果能确定控件文本的最大长度,也可以直接使用栈上的固定长度数组,无需手动管理内存:

wchar_t textOutput[256] = {0};
GetWindowTextW(btnHandle, textOutput, _countof(textOutput));
MessageBox(NULL, textOutput, L"Window Text", MB_OK);

内容的提问来源于stack exchange,提问作者david。

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:57:04