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

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

[delphi] view plain copy

  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.

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

时间: 2024-10-27 00:36:07

delphi备份恢复剪切板(使用了GlobalLock API函数和CopyMemory)的相关文章

delphi备份恢复剪切板

http://blog.csdn.net/youthon/article/details/7327776 分类:            Delphi编程2012-03-07 10:31578人阅读评论(0)收藏举报 delphidestructorconstructorintegerclasswindows 看了季世平老兄的C++代码后翻译过来的 [delphi] view plaincopyprint? unit clipbak; interface uses SysUtils, Classe

Delphi的windows剪切板操作函数

1. Clipbrd函数 function Clipboard: TClipboard;:若应用程序从未使用过剪贴板,则调用该函数形成新的剪贴板:若之前使用过剪贴板则返回使用过的剪贴板. 属性: AsText:将剪贴版的内容作为一个字符串输出:方法:HasFormat:指示剪贴板中是否包含指定格式的数据.例如: [delphi] view plain copy procedure TForm1.Button1Click(Sender: TObject);beginif Clipboard.Has

C# 使用WinApi操作剪切板Clipboard

前言: 最近正好写一个程序,需要操作剪切板 功能很简单,只需要从剪切板内读取字符串,然后清空剪切板,然后再把字符串导入剪切板 我想当然的使用我最拿手的C#来完成这项工作,原因无他,因为.Net框架封装了能实现这种功能的方法 然后就有了如下代码 1 string Temp = ""; 2 while (true) 3 { 4 string Tex = Clipboard.GetText().ToString(); 5 if (!string.IsNullOrWhiteSpace(Tex)

C++和C#实现剪切板数据交互

c#端由于system.windows.form自带的剪切板功能太少,所以写了一个Helper类把接口转了出来.这样就可以用不同的uint的id了. 并且自带的剪切板必须执行在[STAThread]模式下,很麻烦 而c++端拷贝字符串由于编码问题,需要使用宽字符.否则会乱码 c# ClipboardHelper using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Inter

剪切板操作SetClipboardData GetClipboardData

转载:http://blog.csdn.net/ycc892009/article/details/6521565 Code: 01.// Funciton: 02.// 拷贝数据到剪切板 03.// 从剪切板粘贴数据 04.// Data:2011/4/8 05.#include <windows.h> 06.#include <stdio.h> 07.void SetDataToClip(void) 08.{ 09. // 打开剪贴板 10. if (!OpenClipboar

【转载】VC操作剪切板

1.在剪切板上放置数据 if(OpenClipboard())    //打开剪切板{    EmptyClipboard(); //清空剪切板    CString str;       //从控件中取出字符    HANDLE hclip;      //GlobalAlloc分配内存的句柄    char *buf;         //返回的内存地址    GetDlgItemText(IDC_EDIT_SEND,str);    //取字符    hclip=GlobalAlloc(G

VC拷贝字符串到剪切板

char a[15] ="中华人民共和国"; DWORD dwLength = 14; // 要复制的字串长度 HANDLE hGlobalMemory = GlobalAlloc(GHND, dwLength + 1); // 分配全局内存并获取句柄 LPBYTE lpGlobalMemory = (LPBYTE)GlobalLock(hGlobalMemory); // 锁定全局内存 //for (int i = 0; i<dwLength; i++) //{ // 将&qu

剪切板操作

OpenClipboard()// 打开剪贴板 EmptyClipboard()//清空剪切板 SetClipboardData()//把内存中的数据放到剪切板上 GetClipboardData(CF_TEXT) // 从剪切板获取数据 CloseClipboard(); // 关闭剪切板 实例代码: if(OpenClipboard()){ HGLOBAL   ; char   *   buffeclipbufferr; EmptyClipboard(); clipbuffer   =  

将标题空格替换为 &#39;_&#39; , 并自动复制到剪切板上

代码: #include <stdio.h> #include <string.h> #include <windows.h> #include <conio.h> //清空剪切板 int ClearClipboradBuffer() { HGLOBAL hClipboard = NULL; if( OpenClipboard( NULL ) ) { hClipboard = GetClipboardData( CF_TEXT ); GlobalFree(