C++ 通过调用win api实现一下逻辑1 备份Clipboard的所有数据2 操作其他东西3恢复Clipboard的所有数据
以下是一个可能的实现:
#include <windows.h>
// 备份Clipboard数据的函数
void backupClipboardData() {
// 打开Clipboard
if (!OpenClipboard(NULL)) {
return;
}
// 获取Clipboard的数据格式
UINT format = EnumClipboardFormats(0);
while (format) {
// 获取该格式下的数据,并复制到自定义的备份区域
HANDLE hData = GetClipboardData(format);
if (hData) {
// 获取数据大小
SIZE_T size = GlobalSize(hData);
// 分配备份区域
HGLOBAL hBackupData = GlobalAlloc(GMEM_MOVEABLE, size);
if (hBackupData) {
// 复制数据
void* pData = GlobalLock(hData);
void* pBackupData = GlobalLock(hBackupData);
memcpy(pBackupData, pData, size);
GlobalUnlock(hBackupData);
GlobalUnlock(hData);
// 将备份区域保存到自定义数据结构中
// ...
}
}
// 获取下一个格式
format = EnumClipboardFormats(format);
}
// 关闭Clipboard
CloseClipboard();
}
// 恢复Clipboard数据的函数
void restoreClipboardData() {
// 打开Clipboard
if (!OpenClipboard(NULL)) {
return;
}
// 获取备份的数据,并逐个格式将其写入Clipboard
// ...
// 关闭Clipboard
CloseClipboard();
}
// 示例函数:在MessageBox中显示Clipboard的文本
void showMessageWithClipboardText() {
// 备份Clipboard数据
backupClipboardData();
// 获取Clipboard中的文本
if (OpenClipboard(NULL)) {
HANDLE hTextData = GetClipboardData(CF_TEXT);
if (hTextData) {
char* pText = (char*)GlobalLock(hTextData);
if (pText) {
// 在MessageBox中显示文本
MessageBoxA(NULL, pText, "Clipboard Text", MB_OK);
GlobalUnlock(hTextData);
}
}
CloseClipboard();
}
// 恢复Clipboard数据
restoreClipboardData();
}
int main() {
// 示例:在MessageBox中显示Clipboard的文本
showMessageWithClipboardText();
return 0;
}
``
原文地址: https://www.cveoy.top/t/topic/g73a 著作权归作者所有。请勿转载和采集!