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

标签 winapi clipboard clipboard-interaction

我有这个断断续续的问题,让我发疯了很长时间:在我的一个程序中,获取剪贴板数据(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/

相关文章:

javascript - 如何读取网站中的剪贴板数据?

c++ - 剪贴板选择传输不起作用

javascript - jQuery zClip 复制到剪贴板,用于引导下拉列表中的多个链接?

android - 如何在 Android 中将文本复制到剪贴板?

c# - 如何在 C# 中使用 RegisterHotKey()?

winapi - 从管道读取时 Win32 ReadFile 挂起

c - 如何在 GTK 中使用剪贴板?

web-applications - 带有图像复制/粘贴的所见即所得

python - 获取子进程的异常信息

c++ - 在任务调度程序 C++ 中编辑现有任务