Código Delphi
[-]
var NextClipboard: THandle;
....
private
FCapturado:Boolean;
procedure CambioPortapapeles(var Msg: TWMDrawClipboard); message wm_drawclipboard;
procedure SetClpCapturado(const Value: Boolean);
public
property CapturarClipboard:Boolean read FCapturado write SetClpCapturado;
procedure TFrmPpal.SetClpCapturado(const Value: Boolean);
begin
if FCapturado <> Value then
begin
if FCapturado then
ChangeClipboardChain(FrmPpal.Handle, FrmPpal.NextClipboard)
else
NextClipboard := SetClipboardViewer(frmppal.Handle);
FCapturado := Value;
mnuHablarPortapapeles.Checked := frmppal.ClpCapturado;
end;
end;
procedure TFrmPpal.CambioPortapapeles(var Msg: TWMDrawClipboard);
var
i: Integer;
found: Boolean;
str: String;
begin
found := False;
if (Clipboard.HasFormat(CF_TEXT)) then
begin
Str := clipboard.AsText;
end;
SendMessage(NextClipboard, Msg.Msg, Msg.Msg, Msg.Msg);
end;
La tecnica consiste en hacer que nuestra aplicación reciba el mensaje cada vez que en windows se dibuje algo en el portapapeles.
Tenemos que guardar en NextClipboard el siguiente programa que está monitoreando el portapapeles para informarle de que ha cambiado.
Si queremos habilitar la capturación del portapapeles, solo tenemos que hacer: Frmppal.CapturarClipboard := True;
Saludos