![]() |
Screenshot via DirectX erstellen bei Windows 7
Hallo,
ich hab ein kleines Tool programmiert dass Screenshot über DirectX erstellt. Unter Windows XP und Vista funktioniert dies perfekt. Dann habe ich das Tool einen Bekannten gegeben. Er hat Windows 7. Als er ein Spiel spielte (in dem Fall war es Counter Strike) wurden die Screenshots vom Desktop gemacht und nicht vom Spiel. Er war definitiv im Spiel. In FormCreate erstelle ich den Device:
Delphi-Quellcode:
In einem Timer wird der Screenshot erstellt mD := Direct3DCreate9(D3D_SDK_Version); ZeroMemory(@mDisplayMode, SizeOf(mDisplayMode)); md.GetAdapterDisplayMode(0,mDisplayMode); ZeroMemory(@d3pp, SizeOf(d3pp)); d3pp.SwapEffect := Direct3D9.D3DSWAPEFFECT_DISCARD; d3pp.hDeviceWindow := Handle; d3pp.BackBufferCount := 1; d3pp.Windowed := True; d3pp.BackBufferWidth := mDisplayMode.Width; d3pp.BackBufferHeight := mDisplayMode.Height; d3pp.BackBufferFormat := mDisplayMode.Format; d3pp.MultiSampleType := D3DMultisample_NONE; d3pp.EnableAutoDepthStencil := False; d3pp.PresentationInterval := D3DPresent_Interval_Default; mResult := mD.CreateDevice(D3DADAPTER_DEFAULT, Direct3D9.D3DDEVTYPE_HAL, Handle, Direct3D9.D3DCREATE_SOFTWARE_VERTEXPROCESSING, @d3pp,mDev); if (mDev = nil) then begin ShowMessage('Fehler beim Starten. Der Device konnte nicht erstellt werden'); exit; end;
Delphi-Quellcode:
Wie schon erwähnt funktioniet dies unter Windows XP und Vista. Leider nur nicht unter Windows 7. Hat jemand eine Idee woran das liegt?
try
mDev.Reset(Self.d3pp); mDev.CreateOffscreenPlainSurface( mDisplayMode.Width,mDisplayMode.Height, Direct3D9.D3DFMT_A8R8G8B8,Direct3D9.D3DPOOL_SCRATCH,mSurf,0); mDev.GetFrontBufferData(0,mSurf); D3DX9.D3DXSaveSurfaceToFile(Pchar('.\Bild' + IntToStr(i) + '.jpg'), D3DX9.D3DXIFF_JPG,mSurf,0,0); inc(i); Result := True; except Result := False; end; Gruß |
AW: Screenshot via DirectX erstellen bei Windows 7
Win7 betreibt standardmäßig den gesamten Desktop im DX Modus.
|
AW: Screenshot via DirectX erstellen bei Windows 7
Über welchen Wege kann man dann unter Win 7 Screenshot erstellen? Gibt es dann eine Möglichkeit?
|
AW: Screenshot via DirectX erstellen bei Windows 7
??? Gibt es keine Möglichkeit? Hat keiner eine Idde?
Ich such schon seit Tagen danach. Aber ich finde keine Lösung. Ich finde immer nur die Lösung dass man über die DirectX Screenshots machen soll. Dass mach ich doch. Ich bitte um Hilfe! |
AW: Screenshot via DirectX erstellen bei Windows 7
Spontan würde ich sagen: Gewünschtes Fester per Handle bzw. Titel suchen, und den Gesamtscreenshot auf dessen Client-Area beschneiden. Der Inhalt sollte ja drin sein. Für Fullscreen-Anwendungen natürlich Käse.
Man sieht in deinem Code leider nicht, woher "Handle" bestückt wird. Unter Umständen könnte es schon reichen, dort das Handle des gesuchten Fensters einzutragen. Die Zeile "md.GetAdapterDisplayMode(0,mDisplayMode);" sieht auch nach erstem Parameter=Handle aus, und der HDC des Desktops wäre 0. Hier dann evtl. den DC vom Zielfenster einsetzen. Beides ist mangels Informationen* aber auch nur geschätzt. *Welche Lib setzt du ein, bzw. wie sind die Parameterlisten der jeweiligen Methoden die du aufrufst? |
AW: Screenshot via DirectX erstellen bei Windows 7
Danke für deine Antwort.
Es gibt eine DirectX SDK von Mircosoft ( ![]() Dies habe ich installiert und benutz somit die Klasse Direct3D9, Direct3D und D3DX9. Zitat:
Gruß Michael |
AW: Screenshot via DirectX erstellen bei Windows 7
Beim DX SDK sind mittlerweile Delphi Header-Konvertierungen dabei? :shock:
|
AW: Screenshot via DirectX erstellen bei Windows 7
Zitat:
Sherlock |
AW: Screenshot via DirectX erstellen bei Windows 7
Zitat:
Zitat:
|
AW: Screenshot via DirectX erstellen bei Windows 7
Sorry dass ich mich jetzt erst melde. Aber mein Bekannter hat mir erst jetzt sein Feedback gegeben. Leider hast es nicht mit dem Handle geklappt. Also ich hab das Handle vom Programm (in dem Beispiel CS) übergeben.
Éntweder bin ich blind oder gibt es wirklich keine Information im Internet darüber? Ich bin echt am verzweifeln. :( Gruß Langer |
AW: Screenshot via DirectX erstellen bei Windows 7
Noch ein Blindschuss: Das Window-Handle ist imho nicht mit dem HDC identisch. Welcher dort ggf. erwartet wird weiss ich nicht, aber vielleicht mal das jeweils andere auch noch probieren :)
|
AW: Screenshot via DirectX erstellen bei Windows 7
Ok, habe ich jetzt umgesetzt und hab es den Bekannten geschickt. Nun warte ich auf Antwort von ihm.
Aber vielen Dank noch für den Rat. Hoffe dass es jetzt endlich klappt. Gruß Langer |
AW: Screenshot via DirectX erstellen bei Windows 7
Warum stellst du die zu testende Function\Prozedur nicht hier ins Forum ? Die 'Profis' können erstens drüberschauen und und ein Feedback erhälst du hier auch schneller.
|
AW: Screenshot via DirectX erstellen bei Windows 7
Hat er doch?! Schau mal im ersten Post nach!
|
AW: Screenshot via DirectX erstellen bei Windows 7
Ohne Wissen um die verwendete Header-Konversion ist der Code leider nicht soooo irre hilfreich. Zumindest die Signaturen wären schon nicht unwichtig, und die dazu gestellte Nachfrage war leider nicht passend beantwortet. Daher schießen wir noch ein wenig in der Luft rum ;)
|
AW: Screenshot via DirectX erstellen bei Windows 7
Zitat:
|
AW: Screenshot via DirectX erstellen bei Windows 7
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich war im Urlaub deswegen schreib ich jetzt erst. sry Leider hat des mit dem Handle nicht funktioniert. Aber vielen Dank für eure Mühe und den Vorschlag mein Quelltext hochzuladen. Das habe ich jetzt gemacht. Kurz zum Programmablauf: In FormCreate steht welches Programm bzw. welcher Prozess überwacht wird. Testweise steht bei mir notepad.exe. Wenn dieser Prozess läuft dann werden Screenshots erstellt. Die Bilder werden in demselben Ordner gespeichert in der auch die Exe liegt. Wie schon erwähnt benutze ich das DirectX SDK von Microsoft ( ![]() Vielen, Vielen Dank schonmal für eure Mühe! |
AW: Screenshot via DirectX erstellen bei Windows 7
Das Programm bleibt gleich mit einem D3DERR_INVALIDCALL stehen.
|
AW: Screenshot via DirectX erstellen bei Windows 7
Okay, ein letztes Mal: Die Units Direct3D9, Direct3D und D3DX9 sind genau das, wonach ich gefragt hatte. Diese sind nicht mit in deiner zip-Datei, und dies sind genau die Header-Konversionen nach denen ich fragte. Und sie sind ziemlich sicher NICHT Bestandteil des MS DX SDKs. Ganz sicher sogar, ich hab nämlich grad noch mal in meins rein geschaut.
|
AW: Screenshot via DirectX erstellen bei Windows 7
|
AW: Screenshot via DirectX erstellen bei Windows 7
Liste der Anhänge anzeigen (Anzahl: 1)
Naja als ich das SDK installiert habe, bekam ich auch die PAS-Dateien.
Aber ist auch egal ich hab jetzt die PAS-Datein im Anhang. Die sind jetzt für Delphi 6 und Delphi 7. |
AW: Screenshot via DirectX erstellen bei Windows 7
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich hab mal eine Bitte an alle die Windows 7 haben: Könnt ihr bitte mein Screenmaker testen ob der unter Windows 7 Screenshots macht? Also die Bilder werden in demselben Verzeichniss erstellt in der auch die Exe liegt. Wenn man in einem Spiel ist, sollte Screenshots vom Spiel und nicht vom Desktop erstellt werden. Vielen Dank im Voraus PS. Bitte schreibt dazu ob ihr 32 oder 64 bit habt. Gruß Langer |
AW: Screenshot via DirectX erstellen bei Windows 7
Woher nimmt denn dein Programm das Recht, die Screenshots im selben Verzeichnis zu erstellen?
Kann es sein das die da bei Windows 7 geblockt werden, da das Programm keine schreibrechte hat? |
AW: Screenshot via DirectX erstellen bei Windows 7
Guter Hinweis!
Dies habe ich nur testweise. Also in erster Linie wäre es mir wichtig das kein Screenshots vom Desktop sondern vom "tatsächlichen" Bild erstellt wird. Also bei dem Testprogramm müsste man evtl. als Admin starten (rechte Maustaste "Als Administrator starten") Denn dass ist auch ein Thema für sich. Nur ich habe überhaupt kein Ansatz, wie "richtige" Screenshots erstellt werden. Im Internet finde ich nur die Lösung (Über die DirectX) als die richtige. |
AW: Screenshot via DirectX erstellen bei Windows 7
bei mir macht dein programm nur bilder vom cs menu (als admin) oder von desktop/cs menu abwechselnd (normal gestartet).
wenn du das mittlerweile gelöst hast, sag mal bescheid und poste wie, bräuchte das auch für mein screenshot tool :( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 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