Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#14

AW: Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i

  Alt 6. Dez 2010, 12:04
Ich weiß, dass das Aufwärmen alter Themen wenig Freude auslöst, ABER:

Ich habe ca. am 11. November 2010 ein älteres Update in mein TurboDelphi wegen einer kompletten Win-Neuinstallation hinzugefügt. Bis dahin lief folgender Code:
Delphi-Quellcode:
Function CreateFromScreen: TJPEGImage;

  Function SSaverActive: Boolean;
  Begin
    SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, @Result, 0);
  End;

Begin
  Result:=TJPEGImage.Create;
  Try
    If SSaverActive Then
    Begin
      // Bildschirmschoner beenden
    End;
    // hier wird etwas gemacht...
  Except
    Result.Free;//Bei Fehlern den Speicher freigeben
  End;
End;

Procedure TForm1.FormCreate(Sender: TObject);
Begin
  With CreateFromScreen Do
  Try
    SaveToFile('Wohinauchimmer.jpg');
  Finally
    Free;
  End;
End;
Seither bekomme ich eine Speicherzugriffsverletzung. Es funktioniert jetzt nur noch so:
Delphi-Quellcode:
  Function SSaverActive: Boolean;
  Begin
    SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, @Result, 0);
  End;

// ^-- Unterfunktion ausgegliedert.

Function CreateFromScreen: TJPEGImage;
Begin
  Result:=TJPEGImage.Create;
  Try
    If SSaverActive Then
    Begin
      // Bildschirmschoner beenden
    End;
    // hier wird etwas gemacht...
  Except
    Result.Free;//Bei Fehlern den Speicher freigeben
  End;
End;
Kann mir das bitte mal jemand erklären?
Ich habe 3 Tage daran gesessen, das in meinem mehrere tausend Zeilen umfassenden Projekt herauszufinden. Und es liegt definitiv an der Funktion SSaverActive , weil ich alles andere durchgetest habe. Ist das nur ein Phänomen von TurboDelphi oder schlimmer noch von meiner Installation? Komisch ist, dass es auf 2 Rechnern nicht mehr klappt.

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat