delphi备份恢复剪切板(使用了GlobalLock API函数和CopyMemory)
2024-08-31 10:35:36
看了季世平老兄的C++代码后翻译过来的
- unit clipbak;
- interface
- uses
- SysUtils, Classes, Clipbrd, Windows, Contnrs;
- type
- TClipData = class
- Format: WORD;
- Data: THANDLE;
- end;
- TClipBackuper = class
- private
- ClipList: TList;
- public
- constructor Create;
- destructor Destroy; override;
- procedure BackupClip();
- procedure RestoreClip();
- end;
- implementation
- constructor TClipBackuper.Create;
- begin
- Cliplist := TObjectList.Create;
- end;
- destructor TClipBackuper.Destroy;
- begin
- ClipList.Free;
- end;
- procedure TClipBackuper.BackupClip;
- var
- i: Integer;
- Data: THANDLE;
- pcd: TClipData;
- DataMem: Pointer;
- begin
- ClipList.Clear();
- Clipboard.Open();
- try
- for i := 0 to Clipboard().FormatCount - 1 do
- begin
- pcd := TClipData.Create;
- pcd.Format := Clipboard().Formats[i];
- Data := THANDLE(Clipboard().GetAsHandle( pcd.Format));
- if (Data = 0) then
- begin
- pcd.free;
- continue;
- end;
- pcd.Data := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, GlobalSize(Data));
- DataMem := GlobalLock(pcd.Data);
- if (DataMem <> nil) then
- begin
- CopyMemory(DataMem, GlobalLock(Data), GlobalSize(Data));
- GlobalUnlock(THANDLE(pcd.Data));
- GlobalUnlock(THANDLE(Data));
- end;
- ClipList.Add(pcd);
- end;
- finally
- Clipboard().Close();
- end;
- end;
- procedure TClipBackuper.RestoreClip;
- var
- pcd: TClipData;
- i: Integer;
- begin
- Clipboard.Open();
- try
- Clipboard.Clear();
- for i := 0 to ClipList.Count - 1 do
- begin
- pcd := TClipData(ClipList[i]);
- SetClipboardData(pcd.Format, pcd.Data);
- end;
- ClipList.Clear();
- finally
- Clipboard().Close();
- end;
- end;
- end.
http://blog.csdn.net/youthon/article/details/7327776
最新文章
- 用python的BeautifulSoup分析html 【转】
- Spring2.5与JDK8的集成问题
- c++ exports def文件
- <;filter-mapping>; 的 <;dispatcher>; 的作用
- codeforce 600A - Extract Numbers
- 用PLSQL Developer粘贴数据的时候报oracle variant conversion error for variable v0
- CentOS 6.4 64位 安装 apache-tomcat-6.0.43
- Verilog 读写文件
- 内存管理之二——Cocos2d-x学习历程(六)
- myeclipse如何恢复已删除的文件和代码
- Linux SDK之uClinux、Broadcom、Atheros、Realtek、Ralink、Marvell、Intel
- j2ee5.0开发中jstl标签失效
- EntityFramework Core 2.1重新梳理系列属性映射(一)
- Go语言学习之11 日志收集系统kafka库实战
- FPM 0.08安装了打不开解决办法
- java validate date
- Java 容器源码分析之HashMap多线程并发问题分析
- 【刷题】BZOJ 3653 谈笑风生
- Linux - 搭建FastDFS分布式文件系统
- 2017-2018-1 20155220 《信息安全系统设计基础》课下实践——实现mypwd
热门文章
- .NET Framework基础知识(二)(转载)
- php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&;$data[$key];)
- [转] Valgrind使用
- [Angular] Some performance tips
- Qt for Automation
- Redis的常识
- 小强的HTML5移动开发之路(40)——jqMobi中实践header定义的几种方式
- ScrollView嵌套ListView问题
- Archive for the ‘Erlang’ Category 《Erlang编程指南》读后感
- TensorFlow 实战(四)—— tensor 的认识