Dann scheint hier möglicherweise ein Bug vorzuliegen.
Eine Anwendung, die mit dem Clipboard arbeiten möchte muss
OpenClipboard() aufrufen, seine Arbeit tun und dann
CloseClipboard() aufrufen.
OpenClipboard() und CloseClipboard() werden automatisch von der
VCL aufgerufen; man braucht da selbst gar nichts tun.
Wenn nun in deinem externen Programm der Aufruf von CloseClipboard() fehlen würde, dann wäre das ein Bug.
Eine Anwendung, die nur OpenClipboard() aufruft, würde die Zwischenablage für alle anderen Programme blockieren.
Mit der Funktion GetClipboardOwner() kann man den Besitzer des Clipboards abfragen (genauer man bekommt das Fensterhandle).
Delphi-Quellcode:
var
s :
string;
hwnd:THandle;
begin
try
s := clipboard.AsText;
// Zwischenablage lesen
s := '
*** '+s+'
***';
// Text verändern
clipboard.AsText := s;
// zurück Zwischenablage schreiben
except
on E:
Exception do
begin
// Besitzer des Clipboard ermitteln
hwnd := GetClipboardOwner;
ShowWindow(hwnd, SW_SHOW);
// Fenster anzeigen
E.
Message := E.
Message + #13#10+Format('
Window-Handle %x', [hwnd]);
raise;
end;
end;
end;