Für alle die etwas spiel erfahrung haben wissen auch sicher was Fraps ist.
Für die die es nicht wissen Fraps ist ein programm mit dem man ingame Aufnahmen machen kann und auch screenshots.
Dieses besagt programm kann auch die FPS als zahl oben rechts in Gelber schrift anzeigen.
Mir geht es nun darum wie kann ich acuh so infos für den User reinschreiben.
Also die infos die ich printen will hab ich
Die technik fehlt leider^^
Fraps FPS Anzeige
-
- [ gelöst ]
-
Matthias_199 -
20. Mai 2011 um 10:54 -
Geschlossen -
Erledigt
-
-
ich kenn fraps un ich kenn auch die gelbe fps anzeige in fraps..
was ich allerdings nicht verstehe ist deine "frage" bzw was du jetzt möchtest[Blockierte Grafik: http://www.explorer4x4.de/files/glaskugel_562.jpg]
-
Wie in einem ähnlichen Thread schonmal gesagt wenn du über die DirecktX Grafikausgabe etwas "drüber" zeichnen möchtest musst du die DirecktX EndScene Funktion hooken was mit reinem AutoIT Code sehr sehr schwehr bis garnicht möglich ist.
-
Danke Sortoc jetz versteh ich was er meint
-
Jo
Ich will da auch was gelbes einschrieben^^^^
Is mir egal muss nicht reines autoit sein wenn da irgendwer ne func oder dll oder was hat was hilft.
Einzige bedingung es soll sich von auto IT steuern lassen -
"Mal eben" ist das nicht getan
-
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Constants.au3>
HotKeySet("{ESC}", "_Exit")
Local $vU32DLL = DllOpen("User32.dll"), $iGUIColorBG = 0xFFFFFFFF, $iGUIWidth = @DesktopWidth, $iGUIHeight = @DesktopHeight
$hWnd = GUICreate("Test", $iGUIWidth, $iGUIHeight, 0, 0, BitOR(0x80000000, 0x08000000), BitOR(0x00080000, 0x00000008, 0x00000080))
GUISetState()
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphic)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)
$hDC = _WinAPI_GetDC($hWnd)
$hCDC = _WinAPI_CreateCompatibleDC($hDC)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", $iGUIWidth)
DllStructSetData($tSize, "Y", $iGUIHeight)
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", 255)
DllStructSetData($tBlend, "Format", 1)
$tPoint = DllStructCreate($tagPOINT)
$pPoint = DllStructGetPtr($tPoint)
DllStructSetData($tPoint, "X", 0)
DllStructSetData($tPoint, "Y", 0)
GUIRegisterMsg($WM_PAINT, "_ReDraw")
While sleep(20)
_GDIPlus_GraphicsClear($hBuffer, 0x00FFFFFF)
_GDIPlus_GraphicsDrawString($hBuffer, "FPS", 8, 8, "Arial", 20)
_ReDraw()
If BitOR(WinGetState($hWnd), 2) <> 2 Then _WinAPI_SetWindowPos($hWnd, $HWND_TOPMOST, 0, 0, 0, 0, BitOR($SWP_NOMOVE, $SWP_NOSIZE))
WEndFunc _ReDraw()
[/autoit]
Local $hBitmapTmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
_WinAPI_SelectObject($hCDC, $hBitmapTmp)
_WinAPI_UpdateLayeredWindow($hWnd, $hDC, 0, $pSize, $hCDC, $pSource, 0, $pBlend, 2)
_WinAPI_DeleteObject($hBitmapTmp)
EndFunc
Func _Exit()
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
DllClose($vU32DLL)
Exit
EndFunc
Ungefähr das hat name22 mal irgendwo gepostet, hab aber gehört, dass manche Spiele das blocken. -
Das programm müste ja die FPS messen
Habs jetz mit 3 spielen probiert aber es scheint immer abzuschmieren.
Aber wenn ich es so starte steht noch FPS oben links auf dem desktop
aber keien zahlEDIT @ PenGuin
Das es so keine "Mal eben" sache ist ist mir klar,
Aber wenn du ne funktion hast :D, oder einen guten lösungsansatz
hab ich ein offenes ohrEDIT: Naja und die geschichte da im forum geht auch net wirklich, ich mein bei steam haben die doch acuh irgendwas oder Fraps das es allgemein gilt
-
ich schick dir mal eine pm, aber letztendlich wirst du autoit nur als injector nutzen können und eine dll nutzen müssen.
-
Achja, wenn du nun den Endscene hook benutzt, wirst du schnell sehen, dass viele Cheat-geschützte Spiele dich einfach bannen. Jeder Hack der ein Ingame Menü hat, benutzt einen Endscene oder Swapchain Hook (Ich spreche aus Erfahrung). Darum wirst du nicht kommen. Ich habe einen Endscene Hook mal in Autoit Realisiert, ist jedoch so schwer, dass ich erst nach fast 3 Monaten Assembler und Autoit Arbeit fertig war. C++ oder VB & so sind nicht unbedingt dafür nötig, aber eine gute Kenntniss mit DLLStructs und so. Meinen Code werde ich nicht Teilen, weil ich den für einige Tools noch benutze und der in diesem Forum nicht den Regeln entsprechen würde ;-), weil auch diese Anzeige zum Thema "Hacking" fällt.
MfG,
Xyron -
Xyron, schön das du es geschafft hast. leider blöd, dass du deinen code nicht teilst (könnte man ja auch per pm mache, wenn nur die regeln der grund sind). So bleibt ein bisschen der beigeschmack: "juchhu ich kanns und teile aber nicht" ...
-
Tja, ist nun mal so. Ich muss noch dazu sagen, ich werde bald ein Autoit D3D9 Detour Include Veröffentlichen, bin jedoch noch nicht fertig und das ganze ist noch ziemlich instabiel. (Ist jedoch zu 90% Extern ). Und zum Hook: Dieser funktioniert auch nur durch extrem viele Aufrufe von DLLCall und so. Mehr nicht. Mein Programm benötigt für alles so um die 5 Dlls, darunter z.B. die Mecrosoft Detour.dll und die D3D9.dll (die andern sind auch alle von D3D9). Kannst ja mal hier schaun,da hab ich einen ganz simplen Endscene Hook in C++. Vieleicht kannst du den mit DLLCall Befehlen umschreiben, dafür gibts ja die MSDN, da steht in welcher DLL die Funktion ist Den Rest gibts in Autoit. Rat: Du wirst hin und wieder ByRef in Autoit benutzen müssen.
Der Link zum Code: HIER
Ansonsten mach ne DLL die die Funktion D3D9CreateEx hookt und veränder den Parameter WindowMode zu TRUE ^^. Manche Spiele funktionieren dann aber nichtmehr -
-
Mein Code ist das warscheinlich Ergebnis des Tuts von WhiteLion, nur vereinfacht ;-). Ich habs im Diamondhack Tutorial gelernt, das ist auch sehr gut für Einsteiger.
-
is ja auch egal sei ne böse aber warum ich das tut nehme ist wohl klar oder?
-
ich könnte noch ein deutsches video tutorial bieten zu detours... habs hier irgendwo auf platte... falls es jemand braucht.
-
Was auch immer ihr macht: Ich würde niemals empfehlen, einen EndScene-Hook in AutoIt zu realisieren. Da AutoIt sehr langsam ist, geht die Framerate dadurch in den Keller. Als ProofOfConcept ist das noch zu gebrauchen, aber wenn ihr dann wirklich spielen wollt ist das sehr unangenehm würde ich sagen.
PS: Hat man einmal den EndScene-Hook, ist das Messen der Framerate einfach. 1 Frame = 1 Aufruf von EndScene. Also die Aufrufe pro (halber?) Sekunde zählen und ausgeben
-
ja aber es sind sekunden nicht halbe sekunden.
Und ich denke ich werd dafür ne dll machen aber soweit bin ich noch net -
ja aber es sind sekunden nicht halbe sekunden.
Du kannst auch in halben Sekunden zählen und verdoppeln. Dann ist die Anzeige genauer -
also du könntest dich ja mal in Hackerforen umsehen *hust, sry* und dort ein Bsp für D3D nehmen - einfach umschreiben dass er die FPS misst
-