![]() |
Delphi-Version: 5
Screenshot like Snipping Tool
Hi,
würde gerne eine Art "Snipping Tool" in meinem Programm integrieren. Gibt es hierfür bereits einen Code oder Ideen das umzusetzen? Ich hatte erst an eine transparente Form gedacht, das funktioniert alleridngs leider nicht, sobald ich die Form auf Transparent setze, kann ich diese nicht mehr anklicken "man kickt durch". |
AW: Screenshot like Snipping Tool
Warum machst du es denn nicht einfach wie das Snipping Tool?
Screenshot vom Bildschirm machen, dann auf einem maximierten Fenster ohne Rand anzeigen und den Bereich auswählen lassen. Oder meinst du den Fenstermodus? |
AW: Screenshot like Snipping Tool
Zitat:
|
AW: Screenshot like Snipping Tool
Zitat:
Richtig ;) |
AW: Screenshot like Snipping Tool
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang ist ein Formular mit Unit, beides in dein Projekt-Ordner kopieren und "uCapture" in den "Uses" aufnehmen.
Dann sowas in der Art...
Delphi-Quellcode:
Da ist leider ein Flickern drinn was ich nicht abschalten kann da ich irgendwo was falsch mache :-D
procedure Foobar;
var Capture: TfrmCapture; begin Capture := TfrmCapture.Create(nil); try Capture.ShowModal; Image1.Picture.Bitmap.Assign(Capture.Image); finally Capture.Free; end; |
AW: Screenshot like Snipping Tool
Das flackern habe ich nicht, allerdings öfters den Fehler "Fehler bei Bereichsprüfung"
Der Fehler tritt laut Debugger hier auf
Delphi-Quellcode:
In FormMouseMove
ScreenDC := GetDC(0);
Edit: es wird auch nicht genau der Bereich gecaptcherd den ich markiere, das scheint etwas verschoben zu sein, hast das bei dir auch? |
AW: Screenshot like Snipping Tool
Liste der Anhänge anzeigen (Anzahl: 1)
Schau mal, hab zwei Videos beigefügt, einmal mit dem Fehler und einmal mit dem verschobenen Screen catch.
Meine Auflösung ist: 3840 * 1600, als Info |
AW: Screenshot like Snipping Tool
Zitat:
Delphi-Quellcode:
//edit
var
ScreenDC: HDC; Ps: Nein, bei mir macht es was es soll, aber der Rahmen flackert wild solange man die Maus drückt. PPs: Wenn Du mit der mittleren Maus einen Rahmen ziehst, werden alle Farben invertiert :) |
AW: Screenshot like Snipping Tool
Das ist der Spaß, einer neuen Defaulteinstellung neuer Projekte ... die Bereichsprüfung ist jetzt immer aktiv.
Früher konnte man Signed- und Unsigned-Integer gegenseitig zuweisen, ohne dass es knallt ... es war einmal :stupid: Blöd, dass Delphi teilweise selber fehlerhafte Typen hat, wo nun Konstanten und Typen nicht mehr zusammen passen. :wall: z.B. NTSTATUS ist signed, alle Konstenten bis 31 Bit sind signed undefiniert, aber Konstanten größer 31 Bit sind explizit unsigned, also STATUS_SUCCESS vs. STATUS_INVALID_HANDLE ![]() |
AW: Screenshot like Snipping Tool
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mir Deine Videos angeschaut und zeige nun meins um zu zeigen das es wirklich das macht was es sollte...
(Bei mir ist mittlerweile auch das flackern wieder verschwunden da ich den Rahmen nicht mehr male) Warum die Auswahl nicht das "knipst" was es soll da hab ich keinen Ratschlag... vielleicht liegt es an deiner Monitor Skalierung, bei mir ist es auf 100% gestellt. |
AW: Screenshot like Snipping Tool
Zitat:
|
AW: Screenshot like Snipping Tool
Zitat:
Du scheinst damit ja schon begonnen zu haben, wenn auch noch etwas viele Update Mails auslösend ;-) |
AW: Screenshot like Snipping Tool
Zitat:
Solche Dinger mit alten API's weiter zu pflegen (Copy\Paste woher die sourcen auch stammen) bzw. gibt es diese wie Sand am Meer versuchen neu zu kreieren ist vertane zeit und Müh. Beschäftige dich mal mit neueren API's bzw. Aktuellen. Siehe DWM! Meine persönliche Meinung. |
AW: Screenshot like Snipping Tool
DPWM kannte ich noch nicht. Wäre aber evtl. auch ein Hinweis an den OP...
|
AW: Screenshot like Snipping Tool
Zitat:
Mal sehen ob ich was über DWM und erstellen eines Formulars/knipsen eines Rechtecks herausfinden kann. Zitat:
Gerne teile ich den Quelltext mit Euch. Momentan ist es eine sogut wie vollkommen autonome Klasse die kaum Zuwendung zum funktionieren benötigt. 3 Verschiedene Modis per Hotkey sind bereitgestellt, knips alles, knips fokusiertes Fenster, knips mit einer Auswahl (die ich hier gezeigt habe) Bei Interesse mach ich einen neuen Thread damit auf. |
AW: Screenshot like Snipping Tool
Zitat:
|
AW: Screenshot like Snipping Tool
Zitat:
|
AW: Screenshot like Snipping Tool
DWM aka DesktopWindowManager
und, wie gesagt Desktop Duplication API |
AW: Screenshot like Snipping Tool
Zitat:
![]() Was TCanvas und TBitmap damit zu tun haben soll ist schwerlich zu verstehen. Hätte ja verstanden wenn er auf BitBlt eingegangen wäre. Wie dem auch sei. Bin wieder weg. |
AW: Screenshot like Snipping Tool
Jo super, ich ruf da nur eine api mit 2 methoden auf, getdc, releasedc. wow. total alt und mist. genau aus solchen gründen scheu ich mich überhaupt noch irgendwas hier reinzustellen, jemand bittet um hilfe, nett wie ich bin mach ich mir die mühe und stelle was zusammen nur um mir dann durchlesen zu müssen was für veraltete technik da verwendet wird ohne das was von anderer seite kommt. da kommt stimmung auf, bin raus.
|
AW: Screenshot like Snipping Tool
Es gibt auch Gründe für die Nutzung der neuen APIs. Wenn man von hardwarebeschleunigten Fensterinhalten wie Spielen oder Videos Screenshots machen möchte, kommt man mit den herkömmlichen Funktionen nicht weit.
Solange man das nicht braucht, sehe ich allerdings keinen Grund, die bisherigen Funktionen nicht mehr privat zu verwenden. Denn Microsoft empfiehlt zwar schon seit 10 Jahren, diese APIs in neuen Anwendungen nicht mehr zu verwenden, aber sie sind so verbreitet, dass sie so bald nicht einfach entfernt werden. Für neue Anwendungen im beruflichen Kontext sieht das natürlich anders aus. Da sollte man natürlich eher zukunftssicher planen. |
AW: Screenshot like Snipping Tool
Mal so in die Runde gefragt:
Funktioniert da auch wenn SetWindowDisplayAffinity mit WDA_EXCLUDEFROMCAPTURE definiert ist? |
AW: Screenshot like Snipping Tool
SetWindowDisplayAffinity/WDA_MONITOR/WDA_EXCLUDEFROMCAPTURE gehört zum DesktopWindowManager, also wird es wor allem wohl nur von dessen APIs verwendet/beachtet.
|
AW: Screenshot like Snipping Tool
Zitat:
Gibt es was besseres, um Screenshots, remote, etc. zu blockieren? Hab da einen Kunden, dessen Datenschutzbeauftragter nicht müde wird neue Anforderungen sich auszudenken. *** OFFTPIC *** |
AW: Screenshot like Snipping Tool
Bitte fair bleiben und KodeZwerg weder beleidigen noch seine selbstlose Hilfsbereitschaft niedermachen!
Wir sollten ihm für sein Engagement vielmehr dankbar sein! :thumb: :angel: Grüße, Andreas |
AW: Screenshot like Snipping Tool
Zitat:
|
AW: Screenshot like Snipping Tool
Zitat:
|
AW: Screenshot like Snipping Tool
Wenn jemand bereit wäre diesen Quelltext nach DWM zu portieren wäre ich sehr dankbar.
Auch Verzeihung das ich vorhin etwas angepi.... war :stupid: Ich habe mir das mit DWM ![]() Ich habe die in meiner zugrunde liegende "Schnappschuss" Methode nun isoliert so das hoffentlich klar sein sollte worum es mir geht, angestaubte Technik zu erneuern. Wenn meine Vorgehensweise per left, top, right, bottom falsch ist im Umgang mit DWM dann bitte höflichst um Entschuldigung, da spricht dann meine Unwissenheit aus mir.
Delphi-Quellcode:
procedure TkzScreenShot.ScreenShot(const ALeft: Integer; const ATop: Integer; const ARight: Integer; const ABottom: Integer);
var ShotDC: HDC; begin FRect.Left := ALeft; FRect.Top := ATop; FRect.Right := ARight; FRect.Bottom := ABottom; FImageWidth := FRect.Right - FRect.Left; FImageHeight := FRect.Bottom - FRect.Top; ShotDC := GetDCEx(GetDesktopWindow, 0, DCX_WINDOW or DCX_PARENTCLIP or DCX_CLIPSIBLINGS or DCX_CLIPCHILDREN); try FImage.ReleaseHandle; FImage.Width := FImageWidth; FImage.Height := FImageHeight; FCanvas.Handle := ShotDC; if FInverted then begin FInverted := False; FImage.Canvas.CopyMode := cmSrcInvert; end else FImage.Canvas.CopyMode := cmSrcCopy; FImage.Canvas.CopyRect( Rect(0, 0, FImageWidth, FImageHeight), FCanvas, Rect(FRect.Left, FRect.Top, FRect.Right, FRect.Bottom)); FImage.Dormant; FImage.FreeImage; finally ReleaseDC(GetDesktopWindow, ShotDC); end; end; |
AW: Screenshot like Snipping Tool
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:
![]() Damit du und alle anderen euch nicht dort anmelden müsst, könnt ihr auch dieses Repository nutzen: ![]() |
AW: Screenshot like Snipping Tool
Zitat:
![]() |
AW: Screenshot like Snipping Tool
Zitat:
Was ich an dieser Sache nicht verstehe, mir scheint es so als ob DWM ein Control Handle benötigt um darauf in Echtzeit zu Rendern/spiegeln. Also Grundlegend arbeitet es anders als es bei GDI der Fall ist, auch mit einem DirectX-Bildformat hatte ich noch nichts am Hut aber in dem Beispiel-Quelltext aus meiner Post wird ja auch irgendwie ein TBitmap erwähnt. Mal sehen ob ich damit was anfangen kann um im Endeffekt GetDC/ReleaseDC zu ersetzen :? |
AW: Screenshot like Snipping Tool
Zitat:
Der Satz ist der beste: Zitat:
|
AW: Screenshot like Snipping Tool
Zitat:
Da ist doch ein Beispiel dabei, in dem das ganze komplett gekapselt verwendet wird. |
AW: Screenshot like Snipping Tool
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zurzeit habe ich noch ![]() (Mir fällt leider kein Beispiel ein um es vernünftig auszuprobieren da bei mir auch die GDI Variante alles vom Desktop abfotographiert hat, auch Filme in einem Player)
Delphi-Quellcode:
// edit
procedure TkzScreenShot.ScreenShotDirectX9(const ALeft, ATop, ARight, ABottom: Integer);
var BitsPerPixel: Byte; pD3D: IDirect3D9; pSurface: IDirect3DSurface9; g_pD3DDevice: IDirect3DDevice9; D3DPP: TD3DPresentParameters; ARect: TRect; LockedRect: TD3DLockedRect; BMP: TBitmap; i, p: Integer; begin // MessageBox(0, 'DirectX9', 'DirectX9', MB_OK); FRect.Left := ALeft; FRect.Top := ATop; FRect.Right := ARight; FRect.Bottom := ABottom; FImageWidth := FRect.Right - FRect.Left; FImageHeight := FRect.Bottom - FRect.Top; BitsPerPixel := GetDeviceCaps(Application.MainForm.Canvas.Handle, BITSPIXEL); FillChar(d3dpp, SizeOf(d3dpp), 0); D3DPP.Windowed := True; D3DPP.Flags := D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; D3DPP.SwapEffect := D3DSWAPEFFECT_DISCARD; D3DPP.BackBufferWidth := Screen.Width; D3DPP.BackBufferHeight := Screen.Height; D3DPP.BackBufferFormat := D3DFMT_X8R8G8B8; pD3D := Direct3DCreate9(D3D_SDK_VERSION); pD3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow, D3DCREATE_SOFTWARE_VERTEXPROCESSING, @D3DPP, g_pD3DDevice); g_pD3DDevice.CreateOffscreenPlainSurface(Screen.Width, Screen.Height, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, pSurface, nil); g_pD3DDevice.GetFrontBufferData(0, pSurface); ARect := FRect; pSurface.LockRect(LockedRect, @ARect, D3DLOCK_NO_DIRTY_UPDATE or D3DLOCK_NOSYSLOCK or D3DLOCK_READONLY); BMP := TBitmap.Create; try BMP.Width := FImageWidth; BMP.Height := FImageHeight; case BitsPerPixel of 8: BMP.PixelFormat := pf8bit; 16: BMP.PixelFormat := pf16bit; 24: BMP.PixelFormat := pf24bit; 32: BMP.PixelFormat := pf32bit; else BMP.PixelFormat := TPixelFormat.pfDevice; end; p := Cardinal(LockedRect.pBits); for i := 0 to FImageHeight - 1 do begin CopyMemory(BMP.ScanLine[i], Ptr(p), FImageWidth * BitsPerPixel div 8); p := p + LockedRect.Pitch; end; FImageWork := TBitmap.Create; try FImageWork.PixelFormat := BMP.PixelFormat; FImageWork.Width := BMP.Width; FImageWork.Height := BMP.Height; FCanvas.Handle := BMP.Canvas.Handle; if FInverted then begin FInverted := False; FImageWork.Canvas.CopyMode := cmSrcInvert; end else FImageWork.Canvas.CopyMode := cmSrcCopy; FImageWork.Canvas.CopyRect( Rect(0, 0, FImageWidth, FImageHeight), FCanvas, Rect(0, 0, FImageWidth - 1, FImageHeight - 1)); FImage.ReleaseHandle; FImage.Assign(FImageWork); finally FImage.Dormant; FImage.FreeImage; FImageWork.Free; end; finally BMP.Free; pSurface.UnlockRect; end; end; Habe nachträglich mal eine Beispielanwendung zum ausprobieren angehangen, sollte alles selbsterklärend sein, so hoffe ich. (Virus-Total meldet einen (falsch) fund: Rising Trojan.Generic@AI.89 (RDMK:cmRtazrbpxF5IptlRljLk8Ec4amq)) |
AW: Screenshot like Snipping Tool
Eine Webcam mit KI und einer Kalaschnikow.
Wenn jemand Fotoapperat, Handy oder sonstwas rausholt, oder auch nur irgendwie angestengt gut, um sich die Details zu merken, geht der Bildschirm aus und es klickt das kleine Pistölchen, damit derjenige mitbekommt, das er was Falsches machen wollte. OK, gegen Alles kann eh nicht abgesichert werden. Der der eine Wahrheitsliebende hatte es geschafft kistenweise Zeugs nach Hause zu schleppen, was unter den strengsten Sicherheitsbeingungen hätte nichtmal den Raum da verlasen dürfen, sonst wird man gleich ausversehn angerschossen. |
AW: Screenshot like Snipping Tool
Zitat:
|
AW: Screenshot like Snipping Tool
Zitat:
|
AW: Screenshot like Snipping Tool
Zitat:
|
AW: Screenshot like Snipping Tool
Es geht auch nicht um den totalen Schutz.
Wenn es danach geht, kannst du deine Haustür auch gleich ausbauen, weil sie ja nutzlos ist und die Bösen dennoch reinkommen können. Schlösser, Tresore, Polizei ... alles sinnlos ... braucht eh Keiner, weil helfen eh nicht immer. Aber damit kann man z.B. verhindern, dass "normale" Programmen, welche darauf hören, das machen, was du sagst. z.B. Screenshot/Screenrecording oder sowas wie RDP/Treamviewer, welche diese API unterstützen, damit nicht ausversehn gewisse Dinge rausgehn. oder gibt es auf Webseiten eine Datei, welche Webcrawlern sagt, ob man von ihnen verfolgt werden möchte und ob man sich dann auch in den Suchergebnissen gewisser Portale wiederfinden mönnte, bzw. ihnen auch andersrum sagen kann, was sie wie/wo suchen und veröffentlichen sollen. Natürlich können jene Programme diese Informationen dennoch auch ganz einfach ignorieren, drum fängt man dann wiederrum z.B. mit htaccess an die auf anderem Wege auszusperren, was wiederum umgangen werden kann usw. |
AW: Screenshot like Snipping Tool
Zitat:
Zitat:
Ihr habt beide recht. Sehe ich auch so. Jedoch will der Datenschutzbeauftragte möglichst wenig Haftungsrisiko haben und verweist darauf, dass die DGSVO "Privacy by Design" verlangt. Also bekommt der was eingbaut, entsprechende Hinweise und gut ist. *** OFFTPIC *** Zurück zum Hauptthema: RVMedia kann seit einiger Zeit auch Screen Shots erzeugen. Auflösung des Monitors soll unterstützt werden und angeblich auch Multi-Monitor Umgebungen. Habe ich noch nicht ausprobiert. Ich verwende es für den Zugriff auf IP Kameras. Wäre ggf. eine Alternative. Demo gibt es, API Dokumentation ist auf der Webseite, bzw. in der Demo enthalten. Ist aber nicht kostenfrei. Könnte aber ggf. interessant sein, wenn die Make or Buy Kalkulation für Make zu teuer wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:34 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