screenshot unter vista mit aktiviertem aero?



  • hallo!

    dieser beitrag passt vermutlich ebenso gut in die grafik sektion wie in winapis,falls sich ein mod daran stören sollte würde ich ihn/sie bitten den thread einfach zu verschieben.

    zu meiner frage/problem:

    ich würde gerne von dx/opengl fenstern screenshots machen unter windows vista,ohne aero deaktivieren zu müssen.

    meine zwei ansätze waren folgende:

    das std screenshot "verfahren" mittels gdi ->

    GetDC
    CreateCompatibleDC
    CreateCompatibleBitmap
    BitBlt

    liefert screens vom game menu,schwarze screens oder screens,auf denen teile des desktops zu sehen sind.

    funktioniert unter xp/2000 einwandfrei.

    gefunden habe ich dazu folgende sache:

    Given that under WDDM the OpenGL ICD relinquishes control over the desktop, fullscreen mode is now achieved by the driver in a similar way to Direct3D's exclusive mode. For that reason do not try to use GDI features on a fullscreen application (e.g. large GDI cursors, doing readbacks via GetDC/BitBlt), as they refer to the desktop which resides in a completely different piece of memory than the 3D rendering.

    eventl hat jemand erfahrung damit und kennt eine lösung.

    mein zweiter ansatz benutzt die grafik apis,in dem fall opengl:

    1. ich injeziere eine dll in den targetprozess und intercepte wglswapbuffers via inline hooking(detours)
    2. ich hole mir fenstergröße über viewport
    3. ich "lese" den framebuffer als rohpixel mittels glreadpixels
    4. verarbeitung der daten/speichern im gewünschten format

    dieses "verfahren" funktioniert sowohl unter xp als auch unter vista,das unschöne daran ist ,dass es ,soweit ich weiss nötig ist wglswappbuffers zu hooken.ausserdem wird wglswapbuffers jede frame aufgerufen,das screenshot machen dauert aber länger als eine frame -> kleines ingame lagg.

    eventl. hat ja der eine oder andere erfahrungen zu diesem thema und kann mir weiterhelfen 😃

    ps: "alternativlösungen" a la "printscreen simulieren und dann daten aus der zwischenablage auslesen" würde ich ungern verwenden 😕

    grüße
    max



  • Hallo

    Gibt es dafür schon eine Lösung.
    Ich habe das gleiche Problem. Unter XP läuft alles.


Anmelden zum Antworten