我有这种间歇性和不存在的问题,这让我很长时间疯狂:在我的程序中, 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()代码注入此内容?
知道什么可以促使这种不一致的行为?
是否有其他进程可能会锁定剪贴板?如果是这样,我该如何收回?
如何对此类问题进行故障排除或调试?
答案 0 :(得分:3)
您使用的是WebRoot SecureAnywhere吗?如果非允许的应用程序(基本上任何未经预先批准的应用程序)尝试从受保护的应用程序(包括许多浏览器和电子邮件客户端)放置到剪贴板上的剪贴板中检索文本,它的Identity Shield功能会自动清空剪贴板。默认)。发生这种情况时,即使先前对GetClipboardData(CF_TEXT)
的调用返回true,IsClipboardFormatAvailable(CF_TEXT)
也将返回NULL。
答案 1 :(得分:1)