Hallo Freunde,
ich bin auf der Suche nach einer DLL o. Ä. mit der ich einen Screenshot in einem Spiel machen kann. Bei XP funktioniert das wunderbar mit den normalen _ScreenCapture Befehlen, unter Vista/7 hab ich da einfach nur ein schwarzes Bild. Habe es auch schon mit der capturedll.dll ausm Englischen probiert, das gleiche Problem :(. Hat jemand vllt. eine passende dll oder irgend einen Codeschnipsel, der mir weiterhelfen könnte?
Screen Capture bei OpenGL
-
- [ offen ]
-
blubbstar -
25. Dezember 2009 um 21:55 -
Geschlossen -
Erledigt
-
-
Wenn es nur darum geht einen Screenshot von einem Spiel zu machen, dann gingen auch diese Varianten auch wenn sie möglicherweise länger dauern und umständlicher sind:
Ich würde es einmal über die Tasten Alt+Druck probieren, die Standardtasten für Screenshot (zumindest unter XP).
Eine andere Möglichkeit wäre die Screenshotfunktion des Spieles selbst, wenn sie vorhanden ist. -
Alt+Druck / Druck funktioniert unter Vista/7 ebenfalls nicht. In Paint eingefügt ist es ebenfalls schwarz.
-
Hey,
Fraps extra dafür gemacht. Willst du es mit AutoIt steuern können, oder geht es dir nur um ein Tool? -
Hey anno,
genau Fraps kann das. Aber, ich möchte es mit Autoit steuern. Deswegen suche ich eine kostenlose dll wie die z.b. von Fraps oder so, die das kann. -
Bzw. gibt es evtl ein Fraps CMDLine Tool oder ein anderes CMDLine Tool welches OpenGl unterstützt?
Dann könnte ich das ja im Hintergrund benutzen. -
Ich finde echt nix gescheites...
Vielleicht kannste dir selber ne DLL in Delphi schreiben:
http://wiki.delphigl.com/index.php/Screenshot -
Hey,
okay erstmal Danke für deine Bemühungen.
Das mit dem Delphilink hier ist schonmal sehr gut.
Habe mir die opengl32.au3 ausm englischen Forum angesehen. Leider gibts dazu aber kein Thema, sondern lediglich nen DL ohne Erklärungen.
Jedenfalls sind da einige DllCalls für die opengl32.dll im SystemOrdner drin.
Unter anderem auch _glReadPixels, _glReadBuffer, _SwapBuffers, welche für die Screenshotsache notwendig sind, soweit ich weiss.
Ich weiss jetzt nicht ob ich da aufm richtigen Weg bin, aber jedenfalls habe ich hiermal mir die Sachen zusammengelegt:
Hab einiges von dem DelphiCode abgeschrieben und in meinen Gedanken "übersetzt", natürlich passt das hinten und vorne nicht aber naja evtl. hat von euch ja jmnd. eine kleine Ahnung und kann mir sagen ob das überhaupt Sinn macht, was ich hier betreibe oder ob das so garnicht funktionieren kann ;).Spoiler anzeigen
[autoit]#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]
Global Const $GL_UNSIGNED_BYTE = 0x1401
Global Const $GL_RGB = 0x1907
Global Const $GL_FRONT = 0x0404
Dim $pixel_glReadBuffer($GL_FRONT)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$a = _glReadPixels(1, 1, 2, 2, $GL_RGB , $GL_UNSIGNED_BYTE, $pixel)
_ArrayDisplay($pixel)Func _glReadBuffer($mode)
[/autoit] [autoit][/autoit] [autoit]
DllCall( 'opengl32.dll', 'none', 'glReadBuffer', _
'uint', $mode)
EndFuncFunc _glReadPixels($x, $y, $width, $height, $format, $type, ByRef $pixels)
[/autoit] [autoit][/autoit] [autoit]
DllCall( 'opengl32.dll', 'none', 'glReadPixels', _
'int', $x, _
'int', $y, _
'int', $width, _
'int', $height, _
'uint', $format, _
'uint', $type, _
'ptr', DllStructGetPtr( $pixels))
EndFuncFunc _SwapBuffers( $hdc)
[/autoit]
Local $ret = DllCall( 'gdi32.dll', 'int', 'SwapBuffers', _
'hwnd', $hdc)
Return $ret[0]
EndFunc