zoukankan      html  css  js  c++  java
  • delphi备份恢复剪切板(使用了GlobalLock API函数和CopyMemory)

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

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

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

  • 相关阅读:
    python 的csr_python
    OpenBLAS学习一:源码架构解析&GEMM分析
    gcc警告选项汇总
    Welcome! This is the documentation for Python 3.6.8
    CentOS 7 查看和设置防火墙状态
    django中多个app放入同一文件apps
    安装mysqlclient, 链接mysql失败,提示“Library not loaded: @rpath/libmysqlclient.21.dylib”
    动手玩转Docker(二)
    动手玩转Docker(一)
    转载:微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
  • 原文地址:https://www.cnblogs.com/findumars/p/7230745.html
Copyright © 2011-2022 走看看