C/C++ 复制文本到剪贴板和读取剪贴板中的文本-构建dll动态链接库给脚本使用

Clipboard.PNG

C/C++ 复制文本到剪贴板和读取剪贴板中的文本,构建dll动态链接库给脚本使用

#include <stdio.h>
#include <windows.h>
#include <string.h>

bool CopyTextToClipboard(const char* text);
char* GetClipboardText(char* buf);

int main()
{
    CopyTextToClipboard("// 复制文本到剪贴板   bool CopyTextToClipboard(const char* text)\n"
                        "// 读取剪贴板中的文本 char* GetClipboardText(char* buf)");

    char buf[BUFSIZ * 100] = {0};
    char* str = GetClipboardText(buf);
    printf("%s", str);

    return 0;
}

// 读取剪贴板中的文本
char* GetClipboardText(char* buf)
{
    OpenClipboard(nullptr);
    HANDLE hData = GetClipboardData(CF_TEXT);
    if (hData == NULL)
      return "Not is CF_TEXT!";

    char* pszText = static_cast<char*>(GlobalLock(hData));
    strcpy(buf, pszText);

    GlobalUnlock(hData);
    CloseClipboard();
    return buf;
}

// 复制文本到剪贴板
bool CopyTextToClipboard(const char* text)
{
    int i = 0, j = 0;
    for (; i < 6; i++) {
        //打开剪切板
        j = OpenClipboard(NULL);

        //判断是否打开成功,如果打开失败则重新尝试5次
        if (j == 0 && i < 5)
            Sleep(60);
        if (j == 0 && i == 5)
            return false;
        if (j != 0) {
            i = 0;
            j = 0;
            break;
        }
    }
    //分配字节数,HGLOBAL表示一个内存块
    HGLOBAL hmem = GlobalAlloc(GHND, strlen(text) + 1);

    //锁定内存中指定的内存块,并返回一个地址值令其指向内存块的起始处
    char* pmem = (char*)GlobalLock(hmem);

    //清空剪切板并释放剪切板内数据的句柄
    EmptyClipboard();
    memcpy(pmem, text, strlen(text) + 1);
    SetClipboardData(CF_TEXT, hmem);        //写入数据
    CloseClipboard();                       //关闭剪切板
    GlobalFree(hmem);                       //释放内存块

    return true;     //返回成功
}
© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论