C++ WinAPI 实现剪贴板数据备份和恢复
C++ WinAPI 实现剪贴板数据备份和恢复
本文提供一个简单的 C++ 代码示例,演示如何使用 WinAPI 函数来备份和恢复剪贴板中的数据。代码假设剪贴板数据为文本格式 (CF_TEXT),如果需要处理其他格式,需要进行相应的修改。
1. 备份剪贴板数据:
#include <iostream>
#include <Windows.h>
using namespace std;
// 备份剪贴板数据
void backupClipboardData() {
if (!OpenClipboard(NULL)) {
cout << "Error: Cannot open clipboard" << endl;
return;
}
// 获取剪贴板数据的句柄
HANDLE hClipboardData = GetClipboardData(CF_TEXT);
if (hClipboardData != NULL) {
// 复制数据到内存中
char *pszData = (char*)GlobalLock(hClipboardData);
if (pszData != NULL) {
// 备份数据到文件
HANDLE hFile = CreateFile(TEXT("clipboard_backup.txt"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE) {
DWORD dwBytesWritten;
WriteFile(hFile, pszData, strlen(pszData), &dwBytesWritten, NULL);
CloseHandle(hFile);
}
GlobalUnlock(hClipboardData);
}
}
CloseClipboard();
}
2. 恢复剪贴板数据:
// 恢复剪贴板数据
void restoreClipboardData() {
if (!OpenClipboard(NULL)) {
cout << "Error: Cannot open clipboard" << endl;
return;
}
// 从文件中读取备份数据
HANDLE hFile = CreateFile(TEXT("clipboard_backup.txt"), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE) {
DWORD dwFileSize = GetFileSize(hFile, NULL);
char *pszData = new char[dwFileSize + 1];
DWORD dwBytesRead;
ReadFile(hFile, pszData, dwFileSize, &dwBytesRead, NULL);
pszData[dwFileSize] = '\0';
// 设置剪贴板数据
HGLOBAL hClipboardData = GlobalAlloc(GMEM_MOVEABLE, strlen(pszData) + 1);
if (hClipboardData != NULL) {
char *pData = (char*)GlobalLock(hClipboardData);
if (pData != NULL) {
strcpy(pData, pszData);
GlobalUnlock(hClipboardData);
SetClipboardData(CF_TEXT, hClipboardData);
}
}
delete[] pszData;
CloseHandle(hFile);
}
CloseClipboard();
}
3. 使用示例:
int main() {
// 备份剪贴板数据
backupClipboardData();
// 操作其他东西,这里只是简单输出一句话
cout << "Do something else..." << endl;
// 恢复剪贴板数据
restoreClipboardData();
return 0;
}
注意:
- 该代码假设剪贴板数据为文本格式 (CF_TEXT)。如果需要支持其他格式,需要在备份和恢复时分别处理不同的数据格式。
- 备份文件名为 'clipboard_backup.txt',你可以根据需要修改文件名。
希望本文对你有所帮助!如果你有任何问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/oBn9 著作权归作者所有。请勿转载和采集!