AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie mache ich einen screenshot in Z-Order mit PrintWindow-API?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie mache ich einen screenshot in Z-Order mit PrintWindow-API?

Ein Thema von flashcoder · begonnen am 27. Apr 2019 · letzter Beitrag vom 28. Apr 2019
 
EWeiss
(Gast)

n/a Beiträge
 
#18

AW: Wie mache ich einen screenshot in Z-Order mit PrintWindow-API?

  Alt 28. Apr 2019, 02:25
Zitat:
OK! Ich bin raus aus dem Thread.
Hätte ich schon aber den Quelltext meiner Bibliothek gebe ich nicht heraus. Sorry.
Siehe Shot so muss ein ScreenShot aussehen und alles wiedergeben was Original auf dem Desktop sichtbar ist.

Das kann ich dir geben wenn du damit klar kommst.

Delphi-Quellcode:
procedure ScreenCaptureToBackground;
var
  Width, Height: Integer;
  hDeskTop: HWND;
  hDCSrce: HDC;
  pBits: PByte;
  bm: BITMAP;
  p: Integer;
  GIDC: HDC;
begin

  Width := GetSystemMetrics(SM_CXSCREEN);
  Height := GetSystemMetrics(SM_CYSCREEN);

  GIDC := gSprCtrl.GI_CreateImageBackground(HSprCtrl, Width, Height);

  hDeskTop := GetDesktopWindow;
  hDCSrce := GetWindowDC(hDeskTop);

  BitBlt(GIDC, 0, 0, Width, Height, hDCSrce, 0, 0, SRCCOPY);

  FillChar(bm, sizeof(bm), 0);
  GetObject(GetCurrentObject(GIDC, OBJECT_BITMAP), sizeof(bm), @bm);

  pBits := bm.bmBits;
  for p := (bm.bmWidth * bm.bmHeight) - 1 downto 1 do
  begin
    pBits[3] := 255;
    pBits := pBits + 4;
  end;

  ReleaseDC(hDeskTop, hDCSrce);
end;
GI_CreateImageBackground erstellt ein 32Bit Bitmap über "CreateDIBSection"


bsp.
GI_CreateImageBackground(HSprCtrl, Width, Height);

Delphi-Quellcode:
function gCreateDIBSection(DC: HDC; Width, Height, BitCount: Integer): HBitmap;
var
  bi: TBitmapInfo;
  lpBitmapBits: Pointer;
begin

  // Fill in the BITMAPINFOHEADER
  bi.bmiHeader.biSize := sizeof(BITMAPINFOHEADER);
  bi.bmiHeader.biWidth := Width;
  bi.bmiHeader.biHeight := Height;
  bi.bmiHeader.biPlanes := 1;
  bi.bmiHeader.biBitCount := Word(BitCount);
  bi.bmiHeader.biCompression := BI_RGB;
  bi.bmiHeader.biSizeImage := 0;
  bi.bmiHeader.biXPelsPerMeter := 0;
  bi.bmiHeader.biYPelsPerMeter := 0;
  bi.bmiHeader.biClrUsed := 0;
  bi.bmiHeader.biClrImportant := 0;

  Result := CreateDIBSection(DC, bi, DIB_RGB_COLORS, lpBitmapBits, 0, 0);
end;
macht folgendes..
Delphi-Quellcode:
DC := GetDC(HSprCtrl);
hDCSrc := CreateCompatibleDC(DC);

hDIB := gCreateDIBSection(hDCSrc, Width, Height, 32);
// Ich speicher das HBitmap in meine Propertys und hole sie im PaintEvent mit GI_GetProperty zurück.
// Dafür musst du eine andere Lösung finden..
GI_SetProperty(HSprCtrl, GI_Bitmap, LONG_PTR(hDIB));
SelectObject(hDCSrc, hDIB);
// Ich speicher den Source DC in meine Property und hole sie im PaintEvent mit GI_GetProperty zurück.
// Dafür musst du eine andere Lösung finden..
GI_SetProperty(HSprCtrl, GI_DC, LONG_PTR(hDCSrc));
ReleaseDC(HSprCtrl, DC);

Result := hDCSrc;
Das Ergebnis siehst du auf dem Shot!
PS:
Nebenbei die ZOrder scheint dich nicht wirklich zu interessieren warum dann der ganze Aufwand?
Ein einfaches ScreenShot Programm sollte dann ausreichend sein dafür gibt es hier genug Beispiele.. Hier im Forum suchenScreenShot

gruss

Geändert von EWeiss ( 9. Jul 2019 um 08:32 Uhr)
  Mit Zitat antworten Zitat
 


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 22:49 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