Fraps FPS Anzeige

  • 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 :D
    Die technik fehlt leider^^

    Einmal editiert, zuletzt von Matthias_199 (23. Mai 2011 um 18:49)

  • 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.

  • 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

  • Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #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))
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _ReDraw()
    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

    [/autoit]


    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 zahl :D

    EDIT @ 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 ohr

    EDIT: 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

    4 Mal editiert, zuletzt von Matthias_199 (20. Mai 2011 um 17:50)

  • 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

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

  • 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 :rock: ). 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 :thumbup:
    Ansonsten mach ne DLL die die Funktion D3D9CreateEx hookt und veränder den Parameter WindowMode zu TRUE ^^. Manche Spiele funktionieren dann aber nichtmehr

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

  • WhiteLion
    THX für die PN sieht sehr super aus ich fang gleich damit an.
    Xyron
    Auch danke dir für den code , aber das tut das WhiteLion gelinkt hat sieht so genail aus das muss als erstes gemacht werden :D

  • 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.

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

  • is ja auch egal sei ne böse aber warum ich das tut nehme ist wohl klar oder?

  • 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 :D

  • 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 ;)

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal