http://blog.csdn.net/youthon/article/details/7327776

delphi备份恢复剪切板

        分类:            Delphi编程2012-03-07 10:31578人阅读评论(0)收藏举报

看了季世平老兄的C++代码后翻译过来的

  1. unit clipbak;
  2. interface
  3. uses
  4. SysUtils, Classes, Clipbrd, Windows, Contnrs;
  5. type
  6. TClipData = class
  7. Format: WORD;
  8. Data: THANDLE;
  9. end;
  10. TClipBackuper = class
  11. private
  12. ClipList: TList;
  13. public
  14. constructor Create;
  15. destructor Destroy; override;
  16. procedure BackupClip();
  17. procedure RestoreClip();
  18. end;
  19. implementation
  20. constructor TClipBackuper.Create;
  21. begin
  22. Cliplist := TObjectList.Create;
  23. end;
  24. destructor TClipBackuper.Destroy;
  25. begin
  26. ClipList.Free;
  27. end;
  28. procedure TClipBackuper.BackupClip;
  29. var
  30. i: Integer;
  31. Data: THANDLE;
  32. pcd: TClipData;
  33. DataMem: Pointer;
  34. begin
  35. ClipList.Clear();
  36. Clipboard.Open();
  37. try
  38. for i := 0 to Clipboard().FormatCount - 1 do
  39. begin
  40. pcd := TClipData.Create;
  41. pcd.Format := Clipboard().Formats[i];
  42. Data := THANDLE(Clipboard().GetAsHandle( pcd.Format));
  43. if (Data = 0) then
  44. begin
  45. pcd.free;
  46. continue;
  47. end;
  48. pcd.Data := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, GlobalSize(Data));
  49. DataMem := GlobalLock(pcd.Data);
  50. if (DataMem <> nil) then
  51. begin
  52. CopyMemory(DataMem, GlobalLock(Data), GlobalSize(Data));
  53. GlobalUnlock(THANDLE(pcd.Data));
  54. GlobalUnlock(THANDLE(Data));
  55. end;
  56. ClipList.Add(pcd);
  57. end;
  58. finally
  59. Clipboard().Close();
  60. end;
  61. end;
  62. procedure TClipBackuper.RestoreClip;
  63. var
  64. pcd: TClipData;
  65. i: Integer;
  66. begin
  67. Clipboard.Open();
  68. try
  69. Clipboard.Clear();
  70. for i := 0 to ClipList.Count - 1 do
  71. begin
  72. pcd := TClipData(ClipList[i]);
  73. SetClipboardData(pcd.Format, pcd.Data);
  74. end;
  75. ClipList.Clear();
  76. finally
  77. Clipboard().Close();
  78. end;
  79. end;
  80. end.

delphi备份恢复剪切板的更多相关文章

  1. delphi备份恢复剪切板(使用了GlobalLock API函数和CopyMemory)

    看了季世平老兄的C++代码后翻译过来的 unit clipbak; interface uses SysUtils, Classes, Clipbrd, Windows, Contnrs; type ...

  2. Delphi的windows剪切板操作函数

    1. Clipbrd函数 function Clipboard: TClipboard;:若应用程序从未使用过剪贴板,则调用该函数形成新的剪贴板:若之前使用过剪贴板则返回使用过的剪贴板. 属性: As ...

  3. 【笨嘴拙舌WINDOWS】实践检验之剪切板查看器【Delphi】

    该程序能够监视Windows剪切板的内容(文字和图片) 其思路是 先调用SetClipBoardViewer(Self.Handle),让Windows剪切板内容发生改变之后,通知本程序: 然后截获W ...

  4. windows剪切板暂存

    其实最初是因为在项目中使用了html网页编辑器,通过ie的com组件和javascript通讯完成一些事情,其中有一个功能是插入表格,我们原本使用的range.pasteHTML(HTMLstr);根 ...

  5. vim复制到剪切板

    作者:whinc链接:https://www.zhihu.com/question/19863631/answer/89354508来源:知乎 转载文章 Vim 中的复制.删除的内容都会被存放到默认( ...

  6. 浏览器中用JavaScript获取剪切板中的文件

    本文转自我的个人网站  , 原文地址:http://www.zoucz.com/blog/2016/01/29/get-file-from-clipboard/  ,欢迎前往交流讨论 在网页上编辑内容 ...

  7. MySQL 系列(四)主从复制、备份恢复方案生产环境实战

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  8. 基于MySQL MEB的备份恢复

    MEB(MySQL Enterprise Backup)是MySQL商业版中提供的备份工具,属于物理备份. 同XtraBackup一样,mysqlbackup的使用过程同样包含如下三个步骤: 备份(- ...

  9. Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复

    Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工 ...

随机推荐

  1. 04-Django-templates

    # 模板系统 - 模板:一组相同或者相似的页面,在需要个性化的地方进行留白,需要的时候只是用数据填充就可以使用 - 步骤: 1. 在settings中进行设置:TEMPLATES 2. 在tmeplt ...

  2. 安装RF

    pip install robotframework wxPython pip install robotframework-ride pip install --pre --upgrade robo ...

  3. 初学Git——命令总结

    首先,感谢廖雪峰老师制作的Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0 ...

  4. 基本数据类型、包装类、String类型之间的相互转换

    @Testpublic void test2(){//基本数据类型.包装类-->到String类型的转换,调用String类型的静态方法valueOf()即可int i1 = 12;String ...

  5. YNOI2016:掉进兔子洞 (莫队+bitset)

    YNOI2016:掉进兔子洞 题意简述: 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立. 注意这里删掉指的是一个一个删,不是把等于这 ...

  6. LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)

    LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...

  7. django之表单类

    一:表单类 一般我们在html中自己写的表单类似于下面的样子 <!DOCTYPE html> <html lang="en"> <head> & ...

  8. Linux相关TCP参数优化: proc/sys/net/ipv4/ 提高web质量

    tcp_wmem(3个INTEGER变量): min, default, max min:为TCP socket预留用于发送缓冲的内存最小值.每个tcp socket都可以在建议以后都可以使用它.默认 ...

  9. Ansible环境搭建

    Installation Guide(Ansible官网链接) Basics / What Will Be Installed What Version To Pick? Control Machin ...

  10. 同样是1ms子帧,为什么5G的时延比LTE小得多

    转载:http://www.txrjy.com/forum.php?mod=viewthread&tid=1045092 个子帧中一定包含14个OFDM符号.当子载波间隔是15KHz时,1个5 ...