AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Screenshot like Snipping Tool

Ein Thema von Youuuu · begonnen am 14. Okt 2022 · letzter Beitrag vom 18. Okt 2022
Antwort Antwort
Seite 5 von 5   « Erste     345
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#41

AW: Screenshot like Snipping Tool

  Alt 17. Okt 2022, 22:21
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

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;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#42

AW: Screenshot like Snipping Tool

  Alt 18. Okt 2022, 08:20
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.

Geändert von venice2 (18. Okt 2022 um 08:34 Uhr)
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
563 Beiträge
 
Delphi XE6 Enterprise
 
#43

AW: Screenshot like Snipping Tool

  Alt 18. Okt 2022, 09:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#44

AW: Screenshot like Snipping Tool

  Alt 18. Okt 2022, 09:47
nja, abgesehn von DIY-Cameras und den 90%-Chinadingern, die hier natürlich illegal wären und sie desshalb auch niemand kaufen würde.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.986 Beiträge
 
Delphi 12 Athens
 
#45

AW: Screenshot like Snipping Tool

  Alt 18. Okt 2022, 10:45
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#46

AW: Screenshot like Snipping Tool

  Alt 18. Okt 2022, 14:23
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.
(mit irgend einen namen muss man es ja erst mal testen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:45 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