UWP-CapturePicker Fenster für ScreenShots/Videoaufzeichnung anzeigen (ab Windows 10)

    • VB.NET
    • .NET (FX) 4.5–4.8

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

      UWP-CapturePicker Fenster für ScreenShots/Videoaufzeichnung anzeigen (ab Windows 10)

      Hi@all

      Hier möchte ich Euch zeigen, wie man ab Windows 10, das UWP-CapturePicker Fenster aufruft, über das man dann ein ScreenShot/Videoaufzeichnung, entweder von einem Fenster oder von den Screens, erstellen kann. Das Beispiel selbst macht keinen ScreenShot weil es dazu mehrere Möglichkeiten gibt. Eine Möglichkeit wäre das COM-Interface IGraphicsCaptureItem per Direct3D weiter zu verarbeiten (dafür hab ich ein komplettes VB6 ScreenShot-Beispiel ;) ) um dann einen ScreenShot oder auch ein Video vom ausgewählten Fenster/Screen ( blogs.windows.com/windowsdevel…ays-to-do-screen-capture/ ) zu erstellen oder man nimmt die üblichen Methoden um ein ScreenShot zu erstellen. Hier müsste man aber noch die Namen und Position/Dimension der Screens zusätzlich ermitteln. Für Fenster kann man ja dessen HWND und dessen Position/Dimension verwenden. Das Beispiel zeigt auch, wie man UWP-Fenster und Dialoge per COM-Interface IInitializeWithWindow in WinForms-Apps verfügbar macht.

      Das ganze ist wie immer ohne zusätzliche Verweise und Nuget-Pakete und ja, Doevents ist keine schöne Lösung ;) . Den Rest per Direct3D kann man sich ja selbst erarbeiten falls man dieses nutzen möchte. Die hier gezeigten ScreenShots zeigen das CapturePicker-Fenster, über den dann entsprechendes ausgewählt werden kann.
      Bilder
      • CapturePicker_Screen.png

        329,45 kB, 962×674, 126 mal angesehen
      • CapturePicker_Windows.png

        47,63 kB, 962×674, 128 mal angesehen
      Dateien
      Mfg -Franky-

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „-Franky-“ ()

      Hi@all

      Da ich gerade etwas Zeit hatte, hab ich noch den Direct3D-Part in diesem Download eingebaut so das jetzt auch tatsächlich ein Screenshot, von nicht minimierten Fenstern, erstellt wird.
      Dateien
      Mfg -Franky-
      @-Franky- Das ist ja wie mit Kanonen auf Spatzen geschossen.
      Wenn ich ein mir bekanntes Fenster capturen will, gibt es da keine ("normale") Möglichkeit, mit dem Namen und oder dem hWnd reinzugehen und direkt die Bitmap-Instanz zu bekommen?
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      @RodFromGermany
      k.A. was Du unter "normal" verstehst. Die Direct3D Geschichte hat auch seine Vorteile. z.B. wenn das Fenster, das Du capturen möchtest, durch ein anderes Fenster verdeckt ist, dann muss das nicht in den Vordergrund geholt werden. Wenn Dir das HWND bekannt ist, kannst Du auch direkt mit IGraphicsCaptureItemInterop::CreateForWindow (learn.microsoft.com/en-us/wind…eminterop-createforwindow), also ohne den CapturePicker, ein IGraphicsCaptureItem erstellen und per Direct3D verarbeiten. Ansonsten kann man auch vom IGraphicsCaptureItem per GraphicsCaptureItem.DisplayName den Namen vom Fenster holen, per FindWindow den HWND, per GetWindowRect die RECT und irgendwann dann halt CopyFromScreen. Letzteres hat halt den Nachteil, das dazu das Fenster in den Vordergrund geholt muss.

      Ansonsten, schau hier nach: blogs.windows.com/windowsdevel…ays-to-do-screen-capture/ Da findest ein paar Beispiele die aber alle mit Direct3D arbeiten.
      Mfg -Franky-

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „-Franky-“ ()