监视剪贴板数据

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, clipbrd, StdCtrls, ComCtrls, Menus, ExtCtrls, ToolWin;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    ToolBar1: TToolBar;
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    Splitter1: TSplitter;
    Panel2: TPanel;
    N1: TMenuItem;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    TabSheet6: TTabSheet;
    TabSheet7: TTabSheet;
    TabSheet8: TTabSheet;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    ListView1: TListView;
    Button3: TButton;
    Image1: TImage;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }
    next: HWND;
    // 定义一个消息过程用于处理wm_drawclipboard消息
    // procedure WMdrawclipboard(var aa: TMessage);message wm_drawclipboard;
     MyBitmap: TBitmap; { 保存截获的位图 }
    View: Boolean; { 判断是否显示 }
    NextViewerHandle: HWND; { 下一剪贴板观察器的句柄 }
    procedure WMDrawClipboard(var Msg: TWMDrawClipboard);
    message WM_DRAWCLIPBOARD;
    procedure WMChangeCBChain(var Msg: TWMChangeCBChain);
    message WM_CHANGECBCHAIN;
  end;

var
  Form1: TForm1;

  { 响应Windows的剪贴板消息 }
implementation

uses PCHardWareInfo;
{$R *.dfm}
procedure TForm1.WMChangeCBChain(var Msg: TWMChangeCBChain);
begin
if Msg.Remove = NextViewerHandle then
NextViewerHandle := Msg.Next
else
if NextViewerHandle <> 0 then
SendMessage(NextViewerHandle,Msg.Msg,Msg.Remove,Msg.Next);
Msg.Result := 0;
end;
procedure TForm1.WMDrawClipboard(var Msg: TWMDrawClipboard);
var
  FileName: String;
begin
  If NextViewerHandle <> 0 then
    SendMessage(NextViewerHandle, Msg.Msg, 0, 0);
  If ClipBoard.HasFormat(CF_BITMAP) then
  begin
    MyBitmap.Assign(ClipBoard);
    If SaveDialog1.Execute then
    begin
      FileName := SaveDialog1.FileName;
      MyBitmap.SaveToFile(FileName);
    end;
    If View then
    begin
      WindowState := wsNormal;
      Image1.Picture.Bitmap := MyBitmap;
    end;
  end;
  Msg.Result := 0;
end;
 procedure TForm1.Button1Click(Sender: TObject);
begin
  next := SetClipboarDviewer(handle);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ChangeClipboardChain(handle, next);
  SendMessage(next, WM_CHANGECBCHAIN, handle, next);
  MyBitmap.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  // PCHardWareInfo.TPCUserInfo.GetHostIP;
  View := False;
  // SpeedButton2.Down := True;
  MyBitmap := TBitmap.create;
  try
    MyBitmap.Width := 0;
    MyBitmap.Height := 0;
  except
    Application.terminate;
  end;
  ClipBoard.Clear;
  NextViewerHandle := SetClipboarDviewer(handle);
end;

// procedure TForm1.wmdrawclipboard(var aa: tmessage);
// begin
// SendMessage(next,aa.Msg ,aa.WParam ,aa.LParam );
// if(clipboard.hasformat(CF_TEXT)or clipboard.HasFormat(CF_OEMTEXT) )then
// begin
// memo1.Clear;
// memo1.Lines.Add(clipboard.AsText);
// end;
// end;
end.

请问gifimage控件有适合delph

问题已经解决,原来d2010对gifimage的写法不一样,写成了 gifimg,在以前的版本里用的是gifimage,然后自然找不到gifimage,再从网上下载gifimage,又因为版本的问题,导致了上面的错误,其实只要在以前用到gifimage的地方,将引用变成gifimg,就可以用d2010自带的gifimage控件了。  不知道 我这种说法是不是对的,如果 有不对,请指正。

原文地址:https://www.cnblogs.com/blogpro/p/11456926.html

时间: 2024-09-19 10:01:08

监视剪贴板数据的相关文章

监视剪贴板(转)

监视剪贴板 使用一些下载工具比如FlashGet.DuDu下载器,通常有一个选项叫做监视剪贴板,如果发现指定类型的后缀名,则自动开始下载,监视剪贴板的小技巧很有实用价值.        下面就说说监视剪贴板的小技巧.        Windows系统使用list或者是chain来保存当剪贴板的数据发生变化的时候要求被通知到的一些窗口.  每一次当剪贴板的数据发生变化的时候,这个list的第一个窗口收到一个WM_DRAWCLIPBOARD系统消息, 该窗口可以查询剪贴板数据的相关信息.这个非常简单

WIN7下使用.net(C#)监视剪贴板 (转)

最近需要做一个小程序,需要常驻后台,监视剪贴板变化并提取内容, 在网上查了一些资料,先采用SetClipboardViewer方法实现,具体原理可以参考http://www.cnblogs.com/jht/archive/2006/03/20/354088.html,我的程序中使用的是http://code.google.com/p/clipboardviewer/提供的ClipboardChangeNotifier.cs类,比较方便,类代码见附件(在google code中下载或http://

剪切板-监视剪贴板

相关资料: http://user.qzone.qq.com/513187410/blog/1265981516 实例原码: 1 unit Unit1; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 Dialogs, StdCtrls, ExtCtrls, 8 Clipbrd, jpeg; //Clipboard使用 9 10 type 1

【.net 深呼吸】监听剪贴板更新(针对Vista之后系统)

针对 XP 及以前的监视剪贴板更改的方法就不讲了,因为 XP 已严重过时.本篇老周介绍的方法面向 Vista 以上的系统. 在托管应用程序中监听剪贴板更新行为必须用到 Win 32 API ,具体做法,我先简单说一下. 首先,调用 AddClipboardFormatListener 函数来向窗口注册监听行为,它需要一个窗口句柄作为传入参数,该句柄所指的窗口即是监听剪贴板更新的窗口. 然后,当剪贴板的内容被更新,处理程序会收到一条 WM_CLIPBOARDUPDATE 消息.我们在应用程序中,只

6 分析以及监视场景

6 分析以及监视场景在运行过程中, 可以监视各个服务器的运行情况(DataBase Server.Web Server 等).监视场景通过添加性能计数器来实现.这一章非常的重要,确定系统瓶颈全靠它了.下面重点讲讲需要添加那些计数器,以及那些计数器代表什么意思.由于Win2000 Professional.Server 以及Advanced Server 提供的计数器不完全相同, 这里我们讨论将以Server 为基准.监视场景需要在Run 视图中设置然后, 出现添加计数器的对话框其他的操作就和控制

[转]Oracle DB 移动数据

? 描述移动数据的方式 ? 创建和使用目录对象 ? 使用SQL*Loader 加载非Oracle DB(或用户文件)中的数据 ? 使用外部表并通过与平台无关的文件移动数据 ? 说明Oracle 数据泵的一般体系结构 ? 使用数据泵的导出和导入实用程序在Oracle DB 之间移动数据 移动数据:一般体系结构 移动数据:一般体系结构 主要功能组件: ? DBMS_DATAPUMP:包括高速导出与导入实用程序的API,可用于成批地移动数据和元数据. ? 直接路径API (DPAPI):Oracle

SqlServer 变更数据捕获(CDC)

变更数据捕获(Change Data Capture ,简称 CDC)记录 SQL Server 表的插入.更新和删除活动.使用变更数据捕获可以更有效跟踪表对象DML历史操作,对 ETL 等数据转移也非常有用. 变更数据捕获适用版本: SQL Server 2008 以上的 Enterprise Edition.Developer Edition 和 Evaluation Edition 变更数据捕获原理: 变更数据捕获的更改数据源为 SQL Server 事务日志.当对表启用变更数据捕获时,系

关于调用外部命令时与外部命令的数据交互的注意点

前两天,我打算下载点图片.用fiddler分析了下,结果那个网页大量使用js来操作cookie,弄得我头大. go倒是有V8引擎的封装包,可是必须还得编译这个引擎,挺麻烦的. 想起来还有selenium-python可以用.就决定这个了.因为selenium没有python3.4的版本,不得不重装了python2.7. 多说一句,python3确实比python2的组织等各个方面改进很多,写起来感觉更好.可惜第三方库稀少是硬伤. 当时我的思路是这样的,用python和selenium来操作浏览器

windows剪贴板

0x01  Windows剪贴板 Windows剪贴板是一种比较简单同时也是开销比较小的IPC(InterProcess Communication,进程间通讯)机制.Windows系统支持剪贴板IPC的基本机制是由系统预留的一块全局共享内存,用来暂存在各进程间进行交换的数据:提供数据的进程创建一个全局内存块,并将要传送的数据移到或复制到该内存块:接受数据的进程(也可以是提供数据的进程本身)获取此内存块的句柄,并完成对该内存块数据的读取. 为使剪贴板的这种IPC机制更加完善和便于使用,需要解决好