我有这个断断续续的问题,让我发疯了很长时间:在我的一个程序中,获取剪贴板数据(CF_TEXT) 90%(左右)的时间成功,但每隔一段时间它就会返回 NULL。
尽管 OpenClipboard() 在调用 GetClipboardData(CF_TEXT) 之前总是成功(并检查返回值),但还是会这样做。
请注意,90% 的成功率是针对同一页的! (即我知道那里有 CF_TEXT 内容)
注意:当它失败时,我立即调用 GetLastError() 但它返回的只是: "操作成功完成" .
有问题的代码很简单:
if (::OpenClipboard(hwndW))
{
HANDLE handleClip = ::GetClipboardData(CF_TEXT);
if (handleClip == NULL)
dw = GetLastError()
}
什么可能会将错误的 GetLastError() 代码注入(inject)其中?
知道什么会导致这种不一致的行为吗?
是否有其他进程正在锁定剪贴板?如果是这样,我该如何取回它?
如何解决或调试这样的问题?
最佳答案
您在使用 WebRoot SecureAnywhere 吗?如果不允许的应用程序(基本上是任何未经预先批准的应用程序)尝试从剪贴板中检索由 protected 应用程序(包括许多浏览器和电子邮件客户端通过默认)。发生这种情况时,GetClipboardData(CF_TEXT)
即使先前调用 IsClipboardFormatAvailable(CF_TEXT)
也会返回 NULL返回真。
关于winapi - GetClipboardData(CF_TEXT) 在什么情况下会返回 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4740315/