Windows平台C++操作剪贴板需三步:打开、清空(可选)、写入;必须单线程执行,调用OpenClipboard前确保线程拥有前台窗口,内存须用GlobalAlloc分配并带GMEM_MOVEABLE|GMEM_DDESHARE标志,字符串末尾补\0,读取时用GlobalLock映射访问且无需GlobalFree。
在Windows平台用C++操作剪贴板,核心是调用Windows API,关键步骤就三步:打开剪贴板、清空旧内容(可选)、设置新数据格式并写入。整个过程必须在单线程中完成,且不能跨线程访问剪贴板句柄。
调用OpenClipboard前,需确保当前线程拥有前台窗口或已调用SetForegroundWindow(否则可能失败)。参数传NULL表示关联到当前线程的前台窗口。成功后必须配对调用CloseClipboard,否则其他程序无法访问剪贴板。
文本最常用的是CF_UNICODETEXT格式(支持中文),流程是:分配全局内存→锁定获取指针→拷贝字符串→解锁→设置剪贴板数据。注意内存必须用GlobalAlloc分配,并带GMEM_MOVEABLE | GMEM_DDESHARE标志。
先用IsClipboardFormatAvailable(CF_UNICODETEXT)判断是否有文本,再GetClipboardData获取句柄,GlobalLock拿到指针,最后GlobalUnlock释放锁。全程不涉及内存拷贝,只是映射访问。
剪贴板支持数十种格式,比如CF_BITMAP存HBITMAP,CF_HTML存HTML片段(需按特定格式封装)。注册自定义格式可用RegisterClip
boardFormat,返回唯一整型ID。
基本上就这些。不复杂但容易忽略线程上下文和内存标志,照着步骤做,文本复制粘贴稳稳的。