Neue Erkenntnisse ...
Bei mir tritt das Clipboard-Problem wahrscheinlich dadurch auf, dass ich mit dem simulierten [CTRL+C] die Clipboard unter dem Application
Handle der jeweils aktiven Anwendung fülle. Diese Anwendung wird (wenn die Owner-Theorie stimmt) demnach als Eigentümer der Clipboard eingetragen.
Mein Programm darf die Zwischenablage lesen, aber nicht schreiben oder leeren.
Sobald ich einen "schreibenden" Befehl wie z.B. Clipboard.clear oder Clipboard.asText:='1234' verwende hat dieser keine Auswirkung auf den Inhalt der Zwischenablage "!!!" und der nächste Clipbaord.irgendwas Befehl löst die
Exception "Kann Zwischenablage nicht öffnen" aus.
Um die Owner-Theorie zu untermauern habe ich testweise in der clipbrd.pas bei "TClipboard.open" ein Showmessage() eingebaut, damit die Clipbrd.pas zwingend mein Application.Handle an die Windows.OpenClipboard(hwnd) übergibt.
Schon funktioniert alles wieder problemlos ....
Hier die betreffende Stelle aus der clipbrd.pas
Code:
procedure TClipboard.Open;
begin
if FOpenRefCount = 0 then
begin
// Test... Öffne die Clipboard immer unter meinem Application
Handle !!!
Showmessage('Öffne die Zwischenablage für alle Schreib+Leseoperationen unter meinem ApplicationHandle !' );
// ENDE Test... Öffne die Clipboard immer unter meinem Application
Handle !!!
FClipboardWindow := Application.Handle;
if FClipboardWindow = 0 then
begin
{$IFDEF MSWINDOWS}
FClipboardWindow := Classes.AllocateHWnd(MainWndProc);
{$ENDIF}
{$IFDEF LINUX}
FClipboardWindow := WinUtils.AllocateHWnd(MainWndProc);
{$ENDIF}
FAllocated := True;
end;
if not OpenClipboard(FClipboardWindow) then
raise
Exception.CreateRes(@SCannotOpenClipboard);
FEmptied := False;
end;
Inc(FOpenRefCount);
end;
Jetzt kommt der Frageteil
:
1. Wie kann ich ohne Änderungen an der Clipbrd.pas sicherstellen, dass die Zwischenablage unter meinem Application
Handle geöffnet wird ?
2. Warum können alle anderen Programme die Zwischenablage schreiben (auch wenn da schon was aus einer anderen Anwendung drin stand) ?
Hilfe .... !!!!!!!
Schöne Grüße,
Jens