openclipboard失败应检查调用线程是否拥有hwnd、避免在dllmain中调用、对占用情况加重试;setclipboarddata崩溃因未用gmem_moveable分配内存或提前globalfree;乱码源于ansi/unicode格式不匹配,需统一cf_text/cf_unicodetext;监听应使用addclipboardformatlistener而非轮询。

OpenClipboard 失败返回 FALSE 怎么办
多数剪贴板操作卡在第一步,OpenClipboard 返回 FALSE,不是代码写错了,而是调用时机或窗口上下文不对。
- 必须由拥有窗口句柄(
HWND)的线程调用,控制台程序直接调用大概率失败;加一个隐藏窗口或改用GetDesktopwindow()临时绕过 - 不能在 DLL 的
DllMain或静态构造函数里调,此时线程未关联消息队列 - 如果其他程序正占用剪贴板(比如微信正在复制图片),
OpenClipboard会阻塞或失败——加个简单重试逻辑比硬等更实用
SetClipboardData 传入 GlobalAlloc 分配的内存后崩溃
崩溃通常发生在 SetClipboardData 返回后立刻 GlobalFree,或者没按规范设置内存标志位。