![]() |
AW: Wie mache ich einen screenshot in Z-Order mit PrintWindow-API?
Zitat:
Zitat:
|
AW: Wie mache ich einen screenshot in Z-Order mit PrintWindow-API?
Zitat:
1. Die IDE lässt sich nur noch über den Taskmanager beenden. 2. Das gesamte System wird mit fast 50% ausgelastet. 3. Ich kann keine Eingaben hier im Forum mehr machen als Beispiel auf deinen Beitrag antworten oder irgendetwas editieren. 4. Es wirkt sich also auf das gesamte System aus. 5. Ein Neustart des System ist nötig! Und nun macht was ihr wollt. :) Nebenbei es wird alles falsch aufgenommen. Es ist nicht verwendbar. Zitat:
gruss |
AW: Wie mache ich einen screenshot in Z-Order mit PrintWindow-API?
Zitat:
Zitat:
Ich habe keine Ahnung was OP nun wirklich vorhat. Jedes Fenster vollständig als Screenshot, auch wenn es verdeckt ist? Was zeigt dein Screenshot? Sieht fast aus wie ein Mac mit Parallels oder ähnlichem. Oder etwas, was aussehen soll wie ein Mac. |
AW: Wie mache ich einen screenshot in Z-Order mit PrintWindow-API?
Zitat:
Jedes Fenster das diesen Style verwendet wird schwarz gezeichnet kann man doch auf meinem ScreenShot definitiv sehr genau erkennen. Das betrifft meinen KVideo Player64, Meine Anwendung OTTB die aussieht wie beim Mac. Das CMD Fenster das plötzlich den Windows 10 Style verliert und in Win7 Style aufgenommen wird. Und nein mein System ist Windows 10 keine VM oder ähnliches. Wie gesagt das Teil taugt leider nichts da es nicht das tut was es soll. Links ist das aufgenommene Bild im ScreenShot dort kannst du sehen das mein Player der eigentlich den Composite Modus verwendet schwarz ist. Vergleiche das doch einfach mit dem Player auf der rechten Seite. ;) PS: Ich denke du hast kein Problem weil du keine Anwendung mit WS_EX_LAYERED style verwendest.. Zitat:
Und bringt das System komplett durcheinander. gruss |
AW: Wie mache ich einen screenshot in Z-Order mit PrintWindow-API?
Rudy Velthuis,
Ihr Code funktionierte problemlos mit IDE oder System. Danke für die Lösung! |
AW: Wie mache ich einen screenshot in Z-Order mit PrintWindow-API?
Zitat:
OK! ;) Ich bin raus aus dem Thread. gruss |
AW: Wie mache ich einen screenshot in Z-Order mit PrintWindow-API?
Zitat:
EWeiss, hast du eine Lösung für dieses Problem? |
AW: Wie mache ich einen screenshot in Z-Order mit PrintWindow-API?
Zitat:
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:
GI_CreateImageBackground erstellt ein 32Bit Bitmap über "CreateDIBSection"
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; bsp.
Delphi-Quellcode:
GI_CreateImageBackground(HSprCtrl, Width, Height);
Delphi-Quellcode:
macht folgendes..
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;
Delphi-Quellcode:
Das Ergebnis siehst du auf dem Shot!
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; 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.. ![]() gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 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