Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Zwischenablage gesperrt ? (https://www.delphipraxis.net/164785-zwischenablage-gesperrt.html)

haentschman 29. Nov 2011 19:27

Zwischenablage gesperrt ?
 
Hallo an alle...

heute bekam ich von einem Kunden die Fehlermeldung "Zwischenablage konnte nicht geöffnet werden". Der Call Stack sagt daß, das TClipboard.Open fehlschlug.

Frage: unter welchen Bedingungen kann sowas vorkommen ? Ich persönlich sehe das zum ersten Mal.

Danke.

Luckie 29. Nov 2011 19:33

AW: Zwischenablage gesperrt ?
 
[GOOGLE]Zwischenablage konnte nicht geöffnet werden[/GOOGLE]
Ist da eventuell was bei?

haentschman 29. Nov 2011 19:43

AW: Zwischenablage gesperrt ?
 
Danke Luckie,

aber die habe ich größtenteils gelesen. Das MSDN sagt "andere Anwendungen schließen und neu probieren" :lol: Mir ging es eher auch darum ob das eher die Ausnahme ist oder die Regel werden kann. Dann würde ich das seperat behandeln.

Sir Rufo 29. Nov 2011 20:23

AW: Zwischenablage gesperrt ?
 
Ich habe zufällig heute mit der Zwischenablage herumgespielt und da ist mir dieses Verhalten auch aufgefallen.

Bei mir ist dieser Fehler wesentlich öfter aufgetreten, allerdings reagiere ich auch direkt auf eine Änderung der Zwischenablage.

Mit folgendem Code kann ich aber dann doch auf die Zwischenablage zugreifen.

Es wird einfach bei einer Exception bis zu 50 mal versucht auf die Zwischenablage zuzugreifen und vor jedem Zugriff wird jeweils 20ms gewartet. Insgesamt wird also ca. 1 Sekunde versucht darauf zuzugreifen.

Oft funktioniert der erste Zugriff, aber teilweise auch erst nach dem 6-7 Mal
Delphi-Quellcode:
var
  lClipResult : Boolean;
  lClipCount : Integer;
begin
  lClipResult := False;
  lClipCount := 0;
  repeat
    Inc( lClipCount );

    if lClipCount > 1
    then
      Sleep( 20 );

    try
      Clipboard.Open;
      try

        // Jetzt irgendwas mit dem Clipboard machen

        lClipResult := True;
      finally
        Clipboard.Close;
      end;
    except
      // man könnte das jetzt protokollieren, aber macht eigentlich nur Sinn
      // wenn auch nach 50 Versuchen kein Zugriff erfolgen konnte
    end;

  until lClipResult or ( lClipCount > 50 );

end;
Meine Vermutung:

Die Zwischenablage ist durch eine andere Anwendung noch gesperrt, weil von dort etwas hineinkopiert (oder auch ausgelesen?) wird.
Somit ist das Verhalten wohl "normal", denn ich habe keine Information / Eigenschaft gefunden, die da lautet Clipboard.Locked o.ä.

Frag doch mal, ob an dem betroffenen Kundenrechner so was wie ein Clipboard-Manager installiert ist.

sx2008 30. Nov 2011 04:59

AW: Zwischenablage gesperrt ?
 
Wenn irgendeine Anwendung OpenClipboard() aufruft ohne danach CloseClipboard() aufzurufen, dann ist das Clipboard dauerhaft gesperrt solange die unkooperative Anwendung läuft.
Meistens handelt es sich um einem Bug und eher selten um böse Absicht.

haentschman 30. Nov 2011 19:39

AW: Zwischenablage gesperrt ?
 
Danke für die Info´s... 8-)

haentschman 16. Dez 2011 09:41

AW: Zwischenablage gesperrt ?
 
Ich hole das mal wieder hoch...

aktuell habe ich die 2. gleichlautende Meldung von einem anderen Kundenrechner. Dort tritt nach Aussage der Sekretöse das Phänomen öfter mal auf.

...ich kümmere mich dann mal um den Workaround. Ich werde mal SirRufo´s Vorschlag implementieren.

:hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz