• 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

  • 相关阅读:
    最优装载问题---贪心算法
    windows 10 资源管理器多余盘符去除
    js版本排序改造vue版本
    async and await
    echarts问题
    vue兼容到IE9
    expdp/impdp 参数说明,中英对照
    MySQL ibdata1文件迁移
    Oracle AWR报告提取方法
    Vertica DBD 分析优化设计
  • 原文地址:https://www.cnblogs.com/findumars/p/7230745.html
Copyright © 2020-2023  润新知