怎样监控剪贴板的数据发生变化,只要一改变就获取最新内容,我这里说的不是文本,而是文件,比如说,当我复制几个文件时,剪贴板内容肯定会变化,然后我怎样取出我所复制的那些文件的文件名(要全路径哦)呢,我在网上找的都是文本的,没有文件,怎么弄啊,请高手帮忙!
解决方案 »
- 关于adoquery的问题。
- 新手求教:DELPHI中如何将一个图片保存为PHOTOSHOP的PSD格式?
- 我用ado连一个odbc的数据源,怎么知道数据库是什么类型的呢
- 挑战新难度---delphi+光笔扫描问题
- 文件读取情况
- 我写了一个控件AA,这个控件需包含4个我写的pas文件,我安装了这个控件,可以不能运行,需要在
- sql 语句的问题!!运行后总提示cann't find object
- C语言 nDecimal=nDecimal&0x7f; 如何转化DELPHI?
- 怎样将access数据库做成数据库服务器
- 请高手指点:如何利用delphi调用autocad2000中的图形。
- 急急急急急急急急急-edit、label等控件内容如果是中文就会每个文字向左翻转90度横排(非运行状态)
- 我的Delphi 7.0 中怎么没有TServerSocket、TClientSocket这两个控件.
监控捕获我就不写了,关键代码user ShellApi;//........
//SetClipboardViewer过程略
/.........//当有数据变化
var
pGlobal : Thandle;
FileNumber,i:Integer;
pData: array[0..MAX_PATH] of Char;
begin
OpenClipboard(self.Handle);
pGlobal:=GetClipboardData(CF_HDROP); //获取剪贴板中的文件数据
if pGlobal>0 then begin
FileNumber := DragQueryFile(pGlobal,$FFFFFFFF,nil,0); //得到文件数量
for i:=0 to FileNumber-1 do begin
Fillchar(pData,Sizeof(pData),0);
DragQueryFile(pGlobal, i, @pData, Sizeof(pData)); //获得路径及文件名
Memo1.Lines.Add(pData);
end;
end;
CloseClipboard;
end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Clipbrd, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
NextViewerHandle : THandle;
procedure WMDrawClipboard (var message : TMessage);message WM_DRAWCLIPBOARD;
procedure WMChangeCBCHain (var message : TMessage); message WM_CHANGECBCHAIN;
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
NextViewerHandle := SetClipboardViewer(Handle);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
ChangeClipboardChain(Handle, NextViewerHandle);
end;procedure TForm1.WMDrawClipboard (var message : TMessage);
begin
message.Result := SendMessage(WM_DRAWCLIPBOARD, NextViewerHandle, 0, 0);
if (Clipboard.HasFormat(CF_TEXT) or Clipboard.HasFormat(CF_OEMTEXT)) then
begin
Memo1.Clear;
Memo1.Text:=Clipboard.asText;
end;
end;procedure TForm1.WMChangeCBCHain (var message : TMessage);
begin
if message.wParam = NextViewerHandle then
begin
NextViewerHandle := message.lParam;
message.Result := 0;
end else begin
message.Result := SendMessage(NextViewerHandle, WM_CHANGECBCHAIN,message.wParam, message.lParam);
end;
end;end.