Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#5

Re: AV "Kann Zwischenablage nicht öffnen"

  Alt 23. Aug 2004, 21:18
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
  Mit Zitat antworten Zitat