GetWindowTextA 函数 (winuser.h)

将指定窗口标题栏(如果有)的文本复制到缓冲区中。 如果指定的窗口是控件,则复制控件的文本。 但是,GetWindowText 无法检索其他应用程序中控件的文本。

语法

int GetWindowTextA(
  [in]  HWND  hWnd,
  [out] LPSTR lpString,
  [in]  int   nMaxCount
);

参数

[in] hWnd

类型:HWND

包含文本的窗口或控件的句柄。

[out] lpString

类型:LPTSTR

将接收文本的缓冲区。 如果字符串的长度或长于缓冲区,则字符串将被截断并以 null 字符终止。

[in] nMaxCount

类型:int

要复制到缓冲区的最大字符数,包括 null 字符。 如果文本超出此限制,则将被截断。

返回值

类型:int

如果函数成功,则返回值为复制字符串的长度(以字符为单位),不包括终止 null 字符。 如果窗口没有标题栏或文本,如果标题栏为空,或者窗口或控件句柄无效,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError

此函数无法检索其他应用程序中编辑控件的文本。

言论

如果目标窗口归当前进程所有,GetWindowText 会导致 WM_GETTEXT 消息发送到指定的窗口或控件。 如果目标窗口由另一个进程拥有并具有标题,GetWindowText 检索窗口标题文本。 如果该窗口没有标题,则返回值为 null 字符串。 此行为是设计造成的。 它允许应用程序在不响应拥有目标窗口的进程未响应的情况下调用 GetWindowText。 但是,如果目标窗口未响应并且它属于调用应用程序,GetWindowText 将导致调用应用程序变得无响应。

若要在另一进程中检索控件的文本,请直接发送 WM_GETTEXT 消息,而不是调用 getWindowText

例子

以下示例代码演示如何调用 getWindowTextA

hwndCombo = GetDlgItem(hwndDlg, IDD_COMBO); 
cTxtLen = GetWindowTextLength(hwndCombo); 

// Allocate memory for the string and copy 
// the string into the memory. 

pszMem = (PSTR) VirtualAlloc((LPVOID) NULL, 
    (DWORD) (cTxtLen + 1), MEM_COMMIT, 
    PAGE_READWRITE); 
GetWindowText(hwndCombo, pszMem, 
    cTxtLen + 1); 

若要查看此示例在上下文中,请参阅 发送消息

注意

winuser.h 标头将 GetWindowText 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 winuser.h (包括 Windows.h)
User32.lib
DLL User32.dll
API 集 ext-ms-win-ntuser-window-l1-1-4(在 Windows 10 版本 10.0.14393 中引入)

另请参阅

概念

GetWindowTextLength

参考

SetWindowText

WM_GETTEXT

Windows