C++进程间通信之剪贴板

Bertha 。 2022-03-30 15:12 432阅读 1赞

转载:http://blog.csdn.net/hk627989388/article/details/53693636

转载:http://blog.csdn.net/heihei36/article/details/46636275

转载:http://bbs.csdn.net/topics/392043890

  1. //GMEM_FIXED 分配固定的内存,返回值是一个指针.
  2. //GMEM_MOVEABLE
  3. //分配可移动的内存,在Win32中内存块在物理内存中是不可移动的,但在缺省堆中可以. 返回值是该内存对象的句柄,可使用函数 GlobalLock 将该句柄转换为一个指针.
  4. //这个标识不能与 GMEM_FIXED 组合使用.
  5. //ansi
  6. void SetClipboardByAnsi()
  7. {
  8. HWND hWnd = NULL;
  9. HANDLE hHandle;//保存调用GlobalAlloc函数后分配的内存对象的句柄
  10. string strTemp;
  11. char *pBuf;//保存调用AllocLock函数后返回的内存地址
  12. OpenClipboard( hWnd );//打开剪切板
  13. EmptyClipboard();//清空剪切板
  14. strTemp="巴萨VS皇马";
  15. hHandle = GlobalAlloc(GMEM_MOVEABLE, strTemp.length()+1);//分配内存
  16. if (hHandle)//若函数调用失败,则返回NULL
  17. {
  18. pBuf = (char*) GlobalLock(hHandle);//锁定内存,返回申请内存的首地址
  19. //wcscpy(pBuf, strTemp.c_str());
  20. strcpy(pBuf, strTemp.c_str());
  21. GlobalUnlock(hHandle);//解除锁定
  22. SetClipboardData(CF_TEXT, hHandle);//设置剪切板数据
  23. CloseClipboard();//关闭剪切板
  24. }
  25. }
  26. //Unicode
  27. void SetClipboardByUnicode()
  28. {
  29. // 打开剪贴板
  30. if (!OpenClipboard(NULL)|| !EmptyClipboard())
  31. {
  32. printf("打开或清空剪切板出错!\n");
  33. return ;
  34. }
  35. HANDLE hHandle;//保存调用GlobalAlloc函数后分配的内存对象的句柄
  36. wstring strText = L"宽字符测试剪切板";
  37. //hHandle = GlobalAlloc(GMEM_MOVEABLE, strText.length()+1);//错误的
  38. hHandle = GlobalAlloc(GMEM_MOVEABLE, ((wcslen(strText.c_str()))*sizeof(TCHAR))*2);
  39. if (hHandle)//若函数调用失败,则返回NULL
  40. {
  41. LPWSTR lpStr = (LPWSTR)GlobalLock(hHandle);
  42. wcscpy(lpStr, strText.c_str());
  43. GlobalUnlock(hHandle);//解除锁定
  44. SetClipboardData(CF_UNICODETEXT, hHandle);//设置剪切板数据
  45. CloseClipboard();//关闭剪切板
  46. }
  47. }
  48. void GetClipboard()
  49. {
  50. OpenClipboard(NULL);//打开剪切板
  51. if (IsClipboardFormatAvailable(CF_UNICODETEXT))//剪切板上是否存在文本格式
  52. {
  53. HANDLE hClip;
  54. wchar_t* pBuf;
  55. hClip = GetClipboardData(CF_UNICODETEXT);//获取剪切板文本数据
  56. pBuf = (wchar_t*)GlobalLock(hClip);
  57. GlobalUnlock(hClip);
  58. wstring temp = pBuf;
  59. wprintf(L"%s",pBuf);
  60. }
  61. }
  62. int main()
  63. {
  64. //SetClipboardByAnsi();
  65. //SetClipboardByUnicode();
  66. GetClipboard();
  67. getchar();
  68. return 0;
  69. }

发表评论

表情:
评论列表 (有 0 条评论,432人围观)

还没有评论,来说两句吧...

相关阅读

    相关 进程通信——剪贴板

    进程通信——剪贴板 一、简介 1.1 定义 剪贴板是由操作系统维护的一块内存区域,这块内存区域不属于任何单独的进程,但是每一个进程又都可以访问这块内存区域,而

    相关 进程通信信号

    概念:信号(signal)是一种软件中断,是UNIX系统中最为古老的进程之间的通信机制。用于在一个或多个进程之间传递异步信号。它提供了一种处理异步事件的方法,也是进程间惟一的异

    相关 进程通信

    进程间通信 1. 前言 2. 使用文件实现进程间的通信 3. 使用管道实现进程间的通信 4. 共享内存 5. 以上三种通信方式的区别