• 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

  • 相关阅读:
    java中的IO流之转换流(编码转换)
    Elelemt-UI el-table 接收后端返回换行符 /n 不生效
    生信学院|10月13日《SOLIDWORKS参数化应用——DriveWorksXpress》
    互联网时代下服务器该如何进行主机加固
    饼图(内环饼图)
    【C++】C++学习记录.DAY5-结构体的使用
    Vue-2.7自定义指令
    机器学习分类
    【C++进阶】:特殊类的设计
    MySQL高级学习笔记(二)
  • 原文地址:https://blog.csdn.net/lizfs_csdn/article/details/127963907