匯東網


剪贴板操作

[編輯] [转简体]
|
作者:huidong | 分類:【編程】Win32
[ 3 瀏覽 0 評論 0 贊 0 踩 ]

概要
两个函数操作剪贴板

正文

#include <Windows.h>

// 复制数据至剪切板
void CopyToClipboard(const char* data)
{
    if (!data)
    {
        return;
    }

    int nDataLen = strlen(data) + 1;

    // 将数据保存至粘贴板
    HGLOBAL hClip;

    // 定义一个HGLOBAL句柄变量用来指向分配的内存块
    if (OpenClipboard(NULL))
    {
        // 将剪贴板内容清空
        EmptyClipboard();

        // 在堆上分配可移动的内存块,程序返回一个内存句柄
        hClip = GlobalAlloc(GMEM_MOVEABLE, nDataLen);

        // 对分配的内存块进行加锁,将内存块句柄转化成一个指针,并将相应的引用计数器加1
        char* buff = (char*)GlobalLock(hClip);
        strcpy_s(buff, nDataLen, data);

        // 数据写入完毕,进行解锁操作,并将引用计数器数字减1
        GlobalUnlock(hClip);

        // 将存放有数据的内存块放入剪贴板的资源管理中
        SetClipboardData(CF_TEXT, hClip);

        // 关闭剪贴板,释放剪贴板资源的占用权
        CloseClipboard();
    }
}

// 从剪切板中取得数据
void GetTextFromClipboard(char* pStr, int size)
{
    if (OpenClipboard(NULL))//打开剪贴板  
    {
        if (IsClipboardFormatAvailable(CF_TEXT))//判断格式是否是我们所需要  
        {
            HANDLE hClip;

            //读取数据  
            hClip = GetClipboardData(CF_TEXT);
            char* str = (char*)GlobalLock(hClip);

            memset(pStr, 0, size);
            if (str != NULL)
                strcpy_s(pStr, size, str);

            GlobalUnlock(hClip);
            CloseClipboard();
        }
    }
}


亲测可用(VS2019)

[ 0] [ 0]


 評論區  0 條評論

+ 添加評論