![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват копирования в 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