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

如何从第三方应用的Textbox中获取文本?Window Inspector/Spy++

提取第三方Edit控件文本的方法

你已经通过Window Inspector和Spy++拿到了目标Edit控件的句柄0x00010660,可以用Windows原生API直接提取文本,以下是具体实现方式:

方法一:C++ 实现

利用GetWindowTextLengthW获取文本长度,再用GetWindowTextW读取内容:

#include <windows.h>
#include <iostream>
#include <wstring>

int main() {
    HWND hEdit = (HWND)0x00010660; // 你的目标控件句柄
    if (!IsWindow(hEdit)) {
        std::cout << "无效的控件句柄" << std::endl;
        return 1;
    }

    // 获取文本长度(含结束符)
    int length = GetWindowTextLengthW(hEdit);
    if (length == 0) {
        std::cout << "控件无内容或读取失败" << std::endl;
        return 0;
    }

    // 分配内存存储文本
    std::wstring text(length, L'\0');
    GetWindowTextW(hEdit, text.data(), length + 1);

    // 输出结果
    std::wcout << L"提取到的文本:" << text << std::endl;
    return 0;
}

编译时需要链接user32.lib。

方法二:PowerShell 脚本

用PowerShell调用Windows API,适合快速测试:

Add-Type @"
using System;
using System.Runtime.InteropServices;

public class Win32 {
    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    public static extern int GetWindowTextLength(IntPtr hWnd);

    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
}
"@

$hEdit = [IntPtr]0x00010660
$length = [Win32]::GetWindowTextLength($hEdit)
if ($length -eq 0) {
    Write-Host "控件无内容或读取失败"
    exit
}

$sb = New-Object System.Text.StringBuilder ($length + 1)
[Win32]::GetWindowText($hEdit, $sb, $length + 1)
Write-Host "提取到的文本:" $sb.ToString()

注意事项

  • 确保程序以相同或更高权限运行(如果目标应用是管理员权限,你的提取工具也要管理员权限)
  • 上述方法仅对标准Windows Edit控件有效,如果目标控件是自定义的(比如用Qt、WPF等框架实现的非原生Edit),可能需要用UI自动化(UIA)的方式提取,比如用UIAutomationClient库
  • 控件句柄可能会随应用重启变化,实际使用时建议通过窗口类名、标题等动态查找,而不是硬编码句柄

内容的提问来源于stack exchange,提问作者Rafael Ventura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:42:23