Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Screenshot like Snipping Tool (https://www.delphipraxis.net/211636-screenshot-like-snipping-tool.html)

KodeZwerg 17. Okt 2022 22:21

AW: Screenshot like Snipping Tool
 
Zitat:

Zitat von jaenicke (Beitrag 1513359)
Das ist leider nicht ganz so simpel wie die Nutzung der GDI-Funktionen. Es gibt aber auch dafür fertige Quelltexte, die sehr einfach zu verwenden sind:
https://www.codeproject.com/Articles...-API-in-Delphi
Damit du und alle anderen euch nicht dort anmelden müsst, könnt ihr auch dieses Repository nutzen:
https://github.com/tothpaul/Delphi/t...DuplicationAPI

Nun habe ich mal das Github ausprobiert, es sind 2 total unterschiedliche Projekte gegenüber der Webseite.
Das von CodeProject, damit komme ich irgendwie so gar nicht klar.
Das vom Github war sehr einfach zu implementieren so das es erstmal überhaupt was macht :P

Der aktuelle Ist-Zustand:
Delphi-Quellcode:
procedure TkzSnapShot.ScreenShotDWM(const ALeft, ATop, ARight, ABottom: Integer);
var
  Index: Integer;
  BMP:  TBitmap;
  lpPal: PLogPalette;
begin
//  MessageBox(0, 'DWM', 'DWM', MB_OK);
  FSuccess    := False;
  FRect.Left  := ALeft;
  FRect.Top   := ATop;
  FRect.Right := ARight;
  FRect.Bottom := ABottom;
  FImageWidth := FRect.Right - FRect.Left;
  FImageHeight := FRect.Bottom - FRect.Top;
  BMP := TBitmap.Create;
  try
    if FDuplication.GetFrame then
      begin
        FDuplication.DrawFrame(BMP);
        with BMP.Canvas do
          begin
            Pen.Color := clRed;
            Brush.Style := bsClear;
            for Index := 0 to FDuplication.DirtyCount - 1 do
              begin
                {$POINTERMATH ON}
                with FDuplication.DirtyRects[Index] do
                  Rectangle(Left, Top, Right, Bottom);
              end;
          end;

        FBMP := TBitmap.Create;
        try
          FBMP.PixelFormat := TPixelFormat.pf24bit;
          FBMP.Width      := FImageWidth;
          FBMP.Height     := FImageHeight;
          FCanvas.Handle  := BMP.Canvas.Handle;
          if FInverted then
            begin
              FInverted := False;
              FBMP.Canvas.CopyMode := cmSrcInvert or CAPTUREBLT;
            end
            else
              FBMP.Canvas.CopyMode := cmSrcCopy or CAPTUREBLT;
              FBMP.Canvas.CopyRect(
                  Rect(0, 0, FImageWidth, FImageHeight),
                  FCanvas,
                  Rect(FRect.Left, FRect.Top, FRect.Right, FRect.Bottom));
          if (GetDeviceCaps(FCanvas.Handle, RASTERCAPS) and RC_PALETTE = RC_PALETTE) then
            begin
              GetMem(lpPal, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY)));
              FillChar(lpPal^, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY)), #0);
              lpPal^.palVersion := $300;
              lpPal^.palNumEntries := GetSystemPaletteEntries(FCanvas.Handle, 0, 256, lpPal^.palPalEntry);
              if (lpPal^.palNumEntries <> 0) then
                FBMP.Palette := CreatePalette(lpPal^);
              FreeMem(lpPal, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY)));
            end;
          FBitmap.ReleaseHandle;
          FBitmap.Assign(FBMP);
        finally
          FBMP.Free;
          FBitmap.Dormant;
          FBitmap.FreeImage;
          FSuccess := True;
        end;
      end;
  finally
    BMP.Free;
  end;
  if (FSuccess and FAutoClipboard) then
    CopyToClipboard;
end;

venice2 18. Okt 2022 08:20

AW: Screenshot like Snipping Tool
 
Wollte zwar nichts mehr dazu sagen.

Aber DDA (DesktopDuplicationAPI) hat nichts mit DWM (DestopWindowsManager) zu tun. Oder umgekehrt.
Wo greifst du in dem Schnipsel auf die DWM Schnittstelle zu? So das der Name der Funktion "ScreenShotDWM" gerechtfertigt wäre.

Frickler 18. Okt 2022 09:19

AW: Screenshot like Snipping Tool
 
Zitat:

Zitat von johndoe049 (Beitrag 1513362)
Der Satz ist der beste:
Zitat:

The only other explanation was worse: a software investor was stupid enough to think a desktop application could prevent a digital camera from taking photos.

Vielleicht erinnert ihr euch noch an die TCPA- und DRM-Diskussionen vor knapp 20 Jahren. Damals kam von Seiten der Filmindustrie die Idee auf, dass alle Kameras obligatorisch eine Technik enthalten müssen, die verhindert, dass Kinofilme von Bildschirm/Leinwand abgefilmt werden können, indem spezielle Signale des Films ausgewertet werden. Die Kamera würde dann nur einen schwarzen Bildschirm "sehen". Hätte sich das durchgesetzt, könnte man heute tatsächlich das Abfotografieren von Bildschirminhalten blockieren.

himitsu 18. Okt 2022 09:47

AW: Screenshot like Snipping Tool
 
nja, abgesehn von DIY-Cameras und den 90%-Chinadingern, die hier natürlich illegal wären und sie desshalb auch niemand kaufen würde. :stupid:

Und gleichzeitig würden in Russland und von Denen freundlich besuchten Gebieten, der Türkei, Iran uvm. überall ausversehn zufällig Sender stehen, damit niemad mehr Fakenews aufnehmen könnte.

Uwe Raabe 18. Okt 2022 10:45

AW: Screenshot like Snipping Tool
 
Irgendwer sollte diese OT-Posts vielleicht mal in Klatsch und Tratsch verlagern. Aber das hier fiel mir noch dazu ein: Warum lassen sich Geldscheine nicht kopieren?

KodeZwerg 18. Okt 2022 14:23

AW: Screenshot like Snipping Tool
 
Zitat:

Zitat von venice2 (Beitrag 1513409)
Wollte zwar nichts mehr dazu sagen.

Aber DDA (DesktopDuplicationAPI) hat nichts mit DWM (DestopWindowsManager) zu tun. Oder umgekehrt.
Wo greifst du in dem Schnipsel auf die DWM Schnittstelle zu? So das der Name der Funktion "ScreenShotDWM" gerechtfertigt wäre.

Jop. Stimme Dir zu, name war falsch gewählt und bereits kurz nach dem post bereits abgeändert. :thumb:
(mit irgend einen namen muss man es ja erst mal testen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr.
Seite 5 von 5   « Erste     345   

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