GetWindowTextW的使用

GetWindowTextW: 将指定窗口标题栏的文本(如果有)复制到缓冲区,如果指定的窗口是控件,则复制控件的文本。

注意:GetWindowTextW无法检索另一个应用程序中的控件文本

函数原型:

int GetWindowTextW(
  HWND   hWnd,
  LPWSTR lpString,
  int    nMaxCount
);

hWnd: 文本的窗口或控件的句柄

lpString: 将要接受文本的缓冲区,如果字符串与缓冲区一样长,则字符串将被截断并以NULL字符终止

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

备注:

如果目标窗口是由当前进程所拥有,GetWindowText函数导致WM_GETTEXT消息被发送到指定的窗口或控制。如果目标窗口由另一个进程拥有并且具有标题,则GetWindowText将检索窗口标题文本。如果窗口没有标题,则返回值为空字符串。此行为是设计使然。如果拥有目标窗口的进程没有响应,它允许应用程序调用GetWindowText而不会无响应。但是,如果目标窗口没有响应并且它属于调用应用程序,则GetWindowText将导致调用应用程序无响应。

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

之所以在标题强调使用GetWindowTextW,是因为在检索字符时,比如中文,是宽字节,这样在复制字符到缓冲区不会出现乱码的情况,所以最好在创建完环境后,将默认的多字节改成Unicode环境。

更为深奥的解释:https://devblogs.microsoft.com/oldnewthing/20030821-00/?p=42833

一个最小的代码示例:

int textLen = GetWindowTextLengthW(control_hwnd);

wchar_t* buffer = new wchar_t[textLen + 1];

GetWindowTextW(control_hwnd, buffer, textLen + 1);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值