admin 发表于 2024-3-14 20:44:53

[每日一码] 剪切板内容的数据格式

// 【MoreWindows工作笔记11】EnumClipboardFormats 剪切板内容的数据格式
// http://blog.csdn.net/morewindows/article/details/17655299
// 参考http://msdn.microsoft.com/en-us/library/windows/desktop/ms649013(v=vs.85).aspx
#include <Windows.h>
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
      printf("   【MoreWindows工作笔记11】OleGetClipboard 访问剪切板的文本内容\n");
      printf(" - http://blog.csdn.net/morewindows/article/details/17655053 -\n");
      printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");

      if (OpenClipboard(NULL))   
      {
                // 由于设置了VX在复制时带上文字颜色,所以从VS2008中拷贝文本时,数据格式不为CF采用UNICODETEXT
                UINT clipboard采用format;
                while (clipboard采用format = EnumClipboardFormats(0))   
                {
                        printf("Clipboard Data Format = 0x%x\n", clipboard采用format);
                        HGLOBAL global采用memory = GetClipboardData(clipboard采用format);
                        LPCSTR clipboard采用data = (LPCSTR)GlobalLock(global采用memory);
                        if (clipboard采用data != NULL)   
                        {
                              // 剪切板上数据的地址
                              printf("Clipboard Data Address = 0x%x\n", global采用memory);

                              // 剪切板上数据大小
                              DWORD data采用size = GlobalSize(global采用memory);
                              printf("Data Size = %d\n", data采用size);

                              // 16进制输出数据
                              printf("Data: ");
                              for (DWORD i = 0; i < data采用size; i++)   
                              {
                                        if (i % 8 == 0) putchar(' ');
                                        if (i % 16 == 0) putchar('\n');
                                        printf("%02x ", (UCHAR)clipboard采用data);
                              }
                              putchar('\n');

                              // 输出部分数据
                              switch (clipboard采用format)   
                              {
                              case CF采用TEXT:
                                        printf(" 数据格式:CF采用TEXT   数据内容:\n%s\n", clipboard采用data);
                                        break;
                              case CF采用UNICODETEXT:
                                        printf(" 数据格式:CF采用UNICODETEXT 数据内容:\n%ls\n", (LPCWSTR)clipboard采用data);
                                        break;
                              }
                              GlobalUnlock(global采用memory);
                        }
                }CloseClipboard();
      }
      return 0;
}
页: [1]
查看完整版本: [每日一码] 剪切板内容的数据格式