GetClipboardData(CF_TEXT)在什么情况下会返回NULL?

时间:2011-01-19 20:26:50

标签: winapi clipboard clipboard-interaction

我有这种间歇性和不存在的问题,这让我很长时间疯狂:在我的程序中, GetClipboardData(CF_TEXT)成功的时间是90%(左右),但是每隔一段时间它就会返回NULL。

尽管在调用GetClipboardData(CF_TEXT)之前OpenClipboard()总是成功(并且返回值已检查),但这是事实。

请注意,90%的成功率适用于同一页面! (即我知道那里有CF_TEXT内容)

注意:当它失败时,我立即调用GetLastError()但它返回的是:“操作成功完成”

有问题的代码很简单:

if (::OpenClipboard(hwndW))
{
  HANDLE handleClip = ::GetClipboardData(CF_TEXT);
  if (handleClip == NULL)
    dw = GetLastError()
}

什么可能将错误的GetLastError()代码注入此内容?

知道什么可以促使这种不一致的行为?

是否有其他进程可能会锁定剪贴板?如果是这样,我该如何收回?

如何对此类问题进行故障排除或调试?

2 个答案:

答案 0 :(得分:3)

您使用的是WebRoot SecureAnywhere吗?如果非允许的应用程序(基本上任何未经预先批准的应用程序)尝试从受保护的应用程序(包括许多浏览器和电子邮件客户端)放置到剪贴板上的剪贴板中检索文本,它的Identity Shield功能会自动清空剪贴板。默认)。发生这种情况时,即使先前对GetClipboardData(CF_TEXT)的调用返回true,IsClipboardFormatAvailable(CF_TEXT)也将返回NULL。

答案 1 :(得分:1)