GDI hook?

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Bluespide.

    Moin zusammen,

    ich hab da mal eine Frage zum allgemeinen Aufnehmen von Fenstern (Screenshots). Wie funktioniert die Fensteraufnahme von OBS? Klar, wenn man eine DirectX oder OpenGL Anwendung hat, dann kann man diese am Ende der Szene hooken und bei dem gesamten Desktop entweder langsame Screenshots Aufnehmen oder die schnelle Desktop Duplication API nutzen. Aber wie funktioniert das bei einzelnen Fenstern? Wenn ich mir mit GetWindowRect die Fensterposition hole und dann einen Screenshot mache, dann werden natürlich die darüberlegenden Fenster mit aufgenommen, aber bei OBS ist das nicht so. Wenn ich mit PrintWindow das Fenster abgreife, scheint es erst zu funktionieren, aber manche Anwendungen fangen dann an zu flackern. OBS kann diese jedoch Problemlos aufnehmen. OBS liegt zwar Open Source auf Github, aber da steig ich irgendwie nicht ganz durch.

    Weiß jemand wie das läuft oder kennt noch andere Möglichkeiten Fenster aufzunehmen?
    Lösung: DC vom Quellfenster holen, DC von internem Bitmap über Graphics holen und dann per BitBlt kopieren.

    darvids0n:
    "For reference, Open Broadcaster Software implements something like this as part of their "dc_capture" method, although rather than creating the destination context hDest using CreateCompatibleDC they use an IDXGISurface1, which works with DirectX 10+. If there is no support for this they fall back to CreateCompatibleDC."