Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перехват копирования в Clip Board


@!!ex ©   (2008-05-20 23:29:00) 

Нужно узнать, что в буффер поместили текст и его оттуда вытащить. (Так делает Download Master. Ловит появление в буффере ссылок на файлы.)
По таймеру проверять что в буффере лежит - не очень хорошо.
Есть ли другой способ?


  (2009-04-01 13:03:00) [1]

Удалено модератором


  (2009-04-01 13:03:00) [2]

Удалено модератором


Игорь   (2009-01-25 12:39:00) [3]

uses ClipBrd

private
 ClipboardViewer: HWND;
 procedure WMChangeCBChain(var Msg: TWMChangeCBChain); message WM_CHANGECBCHAIN;
 procedure WMDrawClipboard(var Msg: TWMDrawClipboard); message WM_DRAWCLIPBOARD;

procedure TForm1.FormCreate(Sender: TObject);
begin
 ClipboardViewer := SetClipboardViewer(Handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 ChangeClipboardChain(Handle, ClipboardViewer);
end;

function GetStringFromClipboard: WideString;
var
 Data: THandle;
begin
 if not IsClipboardFormatAvailable(CF_UNICODETEXT) then
   Result := Clipboard.AsText
 else
 begin
   Clipboard.Open;
   Data := GetClipboardData(CF_UNICODETEXT);
   try
     if Data <> 0 then
       Result := PWideChar(GlobalLock(Data))
     else
       Result := '';
   finally
     if Data <> 0 then
       GlobalUnlock(Data);
     Clipboard.Close;
   end;
 end;
end;

procedure TForm1.WMChangeCBChain(var Msg: TWMChangeCBChain);
begin
 if ClipboardViewer = Msg.Remove then
   ClipboardViewer := Msg.Next;
 if Msg.Remove <> Handle then
   SendMessage(ClipboardViewer, WM_CHANGECBCHAIN, Msg.Remove, Msg.Next);
end;

procedure TForm1.WMDrawClipboard(var Msg: TWMDrawClipboard);
begin
 SendMessage(ClipboardViewer, WM_DRAWCLIPBOARD, 0, 0);
 if Clipboard.HasFormat(CF_TEXT) then
 begin
   Memo1.Text:= GetStringFromClipboard;
 end;
 Msg.Result := 0;
end;


czuryk   (2009-01-24 12:31:00) [4]

только тебе придется побороться с временами выскакивающими собщениями Cannot open Clipboard. Я с ним долго боролся, пока не сделал такую простую вещь

nastyhappened:=false;
repeat
try
...получаем данные из клипборда...
except
nastyhappened:=true;
sleep(100);
end;
until nastyhappened=false;


способ примитивный, но очень эффективный.


  (2009-01-24 01:30:00) [5]

Удалено модератором


@!!ex   (2008-05-21 08:22:00) [6]

> [1] MBo ©   (21.05.08 06:05)

Ок. СПасибо!


MBo   (2008-05-21 06:05:00) [7]

SetClipboardViewer


Наверх

Титульная страница Поиск, карта сайта Написать письмо