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',你可以根据需要修改文件名。

希望本文对你有所帮助!如果你有任何问题,请随时提问。

C++ WinAPI 实现剪贴板数据备份和恢复

原文地址: https://www.cveoy.top/t/topic/oBn9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录