AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi AV "Kann Zwischenablage nicht öffnen"
Thema durchsuchen
Ansicht
Themen-Optionen

AV "Kann Zwischenablage nicht öffnen"

Ein Thema von jensw_2000 · begonnen am 23. Aug 2004 · letzter Beitrag vom 24. Aug 2004
Antwort Antwort
jensw_2000
(Gast)

n/a Beiträge
 
#1

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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz