如何使用GetWindowText API区分空窗口文本和错误?

Fab*_*ied 7 windows winapi

GetWindowText函数的返回值被记录如下:

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

现在,当调用此方法并接收返回值为零时,我如何知道是否GetLastError会返回合理的值?毕竟,零不仅用于指示失败,还可能意味着窗口文本为空,在这种情况下GetLastError不会返回未定义的值.

我自己的想法:

  • 起初,我认为可能GetWindowText会在成功时将最后一个错误设置为0.但测试显示它没有(如果确实如此,我无论如何都不能依赖它,因为这没有记录).
  • 然后,我认为也许GetWindowText可能会在成功时保留最后一个错误,因此在调用之前将其设置为0将允许我检查上一个错误是否已更改.测试显示这可能有效,但由于它不是这种方式,我不能依赖它.(我想这在很大程度上取决于具体情况和实施情况GetWindowText.)
  • 当然,我可以首先检查窗口文本长度GetWindowTextLength,然后GetWindowText仅在长度大于0时调用.但是,如果窗口在我的调用GetWindowTextLength和之间更改文本GetWindowText怎么办?我再次不能依赖零表示错误的返回值.

那么,我能做些什么才能明确决定是否GetWindowText失败?

Han*_*ant 1

是的,你是对的,你实际上无法GetLastError()看出差异。不漂亮。我能想到的唯一解决方法是事后使用IsWindow()。如果返回 TRUE,则返回零实际上意味着“空字符串”。然而,这并不涉及传递错误的缓冲区指针,希望在您的代码中可以轻松避免。