// 显示剪贴板的文本
#include <comdef.h>
#include <iostream>
#include <oleidl.h>
#include <string>
#include <vector>
#include <windows.h>
using namespace std;
std::vector<std::string> GetPaths() {
std::vector<std::string> 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 <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int SaveBmpFileFromClipboard(const char *file_name = "capture.bmp") {
HANDLE hDib;
LPVOID lpDib;
BITMAPFILEHEADER bfBuf;
if (IsClipboardFormatAvailable(CF_DIB)) //检查剪贴板内容是否为DIB类型的数据
{
hDib = GetClipboardData(CF_DIB