• C++读取系统剪贴板数据(windows)


    // 显示剪贴板的文本
    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;

    std::vector GetPaths() {
      std::vector path_list;

      HDROP hDrop =
          HDROP(::GetClipboardData(CF_HDROP)); // 获取剪切板中复制的文件列表相关句柄

      if (hDrop != NULL) {
        WCHAR szFilePathName[MAX_PATH + 1] = {0};

        UINT nNumOfFiles =
            DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); // 得到文件个数

        // 考虑到用户可能同时选中了多个对象(可能既包含文件也包含文件夹),所以要循环处理
        for (UINT nIndex = 0; nIndex < nNumOfFiles; ++nIndex) {
          memset(szFilePathName, 0, MAX_PATH + 1);
          DragQueryFile(hDrop, nIndex, szFilePathName, MAX_PATH); // 得到文件名

          _bstr_t path(szFilePathName);
          std::string ss = (LPCSTR)path;

          path_list.push_back(ss);
        }
      }

      return path_list;
    }

    int GetBitmapSize() {
      int nSize = 0;
      // 打开剪切板,并且剪切板里存在图片
      if (IsClipboardFormatAvailable(CF_BITMAP)) {
        // 取得剪切板中的图片数据
        HGLOBAL hClipBoard = GetClipboardData(CF_BITMAP);
        if (hClipBoard) {
          //从剪贴板中取出一个内存的句柄
          // 获取内存大小
          // nSize = GlobalSize(hClipBoard);
          //对内存块进行加锁,将内存句柄值转化为一个指针,并将内存块的引用计数器加一,内存中的数据也返回到指针型变量中
          // char &data = new char[nSize];
          // memcpy(data, GlobalLock(hClipBoard), nSize);
          // 将数据存储
          //将内存块的引用计数器减一
          GlobalUnlock(hClipBoard);
          //关闭剪贴板,释放剪贴板资源的占用权
          CloseClipboard();
        }
      }
      return nSize;
    }

    //返回值:
    // 0 - 存储bmp文件成功
    // 1 - 剪贴板内容非DIB格式
    // 2 - 打开剪贴板失败
    // 3 - 存储bmp文件失败
    #include
    #include
    #include
    #include
    int SaveBmpFileFromClipboard(const char *file_name = "capture.bmp") {
      HANDLE hDib;
      LPVOID lpDib;
      BITMAPFILEHEADER bfBuf;

      if (IsClipboardFormatAvailable(CF_DIB)) //检查剪贴板内容是否为DIB类型的数据
      {
        hDib = GetClipboardData(CF_DIB

  • 相关阅读:
    flutter dio^5.3.3实现刷新token
    面试利器!阿里内部强推的RocketMQ学习指南,不能再细了
    【Python实战】听书就用它了:海量资源随便听,内含几w书源,绝对精品哦~(好消息好消息)
    为什么有的孩子玩着玩着就成了学霸?
    EasyWeChat6.x生成小程序码, JSON 数据时遇到了非法的 UTF-8 字符序列
    Understanding Model Parameters in Machine Learning
    【漏洞复现-webmin-命令执行】vulfocus/webmin-cve_2019_15107
    GBase 8s中IO读写方法
    【c语言】-指针进阶(下)
    go 地址对齐保证
  • 原文地址:https://blog.csdn.net/lizfs_csdn/article/details/127963907