Capture Screenshot from another desktoptake a screenshot of a desktop created using createdesktop apiCapture screenshot of hidden desktophow to capture screen from another desktop?(CreateDesktop)Can I call a constructor from another constructor (do constructor chaining) in C++?Website screenshotsCapture screenshot of active window?Chrome desktop notification exampleGradient fill bitmap and CreatePatternBrush just gives black fill instead of gradientHow to programmatically take a screenshot?How to take screenshot with Selenium WebDriverUsing HTML5/Canvas/JavaScript to take in-browser screenshotsWhy is reading lines from stdin much slower in C++ than Python?Rendering Windows screenshot capture bitmap as DirectX texture

What is the philosophical significance of speech acts/implicature?

Function pointer with named arguments?

Do I have an "anti-research" personality?

On The Origin of Dissonant Chords

Why do games have consumables?

Which big number is bigger?

acheter à, to mean both "from" and "for"?

Two field separators (colon and space) in awk

Phrase for the opposite of "foolproof"

Can we say “you can pay when the order gets ready”?

Size of electromagnet needed to replicate Earth's magnetic field

How can I practically buy stocks?

Can I criticise the more senior developers around me for not writing clean code?

Is it idiomatic to construct against `this`

Classification of surfaces

What happens to Mjolnir (Thor's hammer) at the end of Endgame?

How to fry ground beef so it is well-browned

Critique of timeline aesthetic

555 timer FM transmitter

How to write a column outside the braces in a matrix?

What are the characteristics of a typeless programming language?

Why didn't the Space Shuttle bounce back into space as many times as possible so as to lose a lot of kinetic energy up there?

What's the name of these pliers?

A ​Note ​on ​N!



Capture Screenshot from another desktop


take a screenshot of a desktop created using createdesktop apiCapture screenshot of hidden desktophow to capture screen from another desktop?(CreateDesktop)Can I call a constructor from another constructor (do constructor chaining) in C++?Website screenshotsCapture screenshot of active window?Chrome desktop notification exampleGradient fill bitmap and CreatePatternBrush just gives black fill instead of gradientHow to programmatically take a screenshot?How to take screenshot with Selenium WebDriverUsing HTML5/Canvas/JavaScript to take in-browser screenshotsWhy is reading lines from stdin much slower in C++ than Python?Rendering Windows screenshot capture bitmap as DirectX texture






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








1















I have created a second desktop using CreateDesktop and im not switching to it. Also i have created some processes in it like Explorer.exe and Winrar.exe. Next i have a code which takes Screenshot of current desktop to clipboard. Both CreateDesktop and Screenshot works, But Screenshot of that new desktop or window returns a black bitmap:



This is the screenshot for a window in a desktop which returns current desktop:



// hwnd is handle to winrar or ... created in a new desktop retrieved by EnumDesktopWindow
RECT rc;
GetClientRect(hwnd, &rc);
const HDC hScreenDC = GetDC(nullptr);
const HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
const int width = GetDeviceCaps(hScreenDC, HORZRES);
const int height = GetDeviceCaps(hScreenDC, VERTRES);
const HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
HBITMAP(SelectObject(hMemoryDC, hBitmap));
BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);

OpenClipboard(nullptr);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();

DeleteDC(hMemoryDC);
DeleteDC(hScreenDC);


I have implemented both this methods in c# but same thing happens there.



There are great resources like:



Capture screenshot of hidden desktop



take a screenshot of a desktop created using createdesktop api



C# – SCREEN CAPTURE WITH VISTA DWM (SHARED DIRECT3D SURFACE)



Window Contents Capturing using WM_PRINT Message



how to capture screen from another desktop?(CreateDesktop)



Also this is like a dead topic, No new article, Explanation or solution to it.



I have read most of them but no luck, This was my closest try i think. Also language doesnt matter for me: C#, C++, Python or ... .










share|improve this question






























    1















    I have created a second desktop using CreateDesktop and im not switching to it. Also i have created some processes in it like Explorer.exe and Winrar.exe. Next i have a code which takes Screenshot of current desktop to clipboard. Both CreateDesktop and Screenshot works, But Screenshot of that new desktop or window returns a black bitmap:



    This is the screenshot for a window in a desktop which returns current desktop:



    // hwnd is handle to winrar or ... created in a new desktop retrieved by EnumDesktopWindow
    RECT rc;
    GetClientRect(hwnd, &rc);
    const HDC hScreenDC = GetDC(nullptr);
    const HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
    const int width = GetDeviceCaps(hScreenDC, HORZRES);
    const int height = GetDeviceCaps(hScreenDC, VERTRES);
    const HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
    HBITMAP(SelectObject(hMemoryDC, hBitmap));
    BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);

    OpenClipboard(nullptr);
    EmptyClipboard();
    SetClipboardData(CF_BITMAP, hBitmap);
    CloseClipboard();

    DeleteDC(hMemoryDC);
    DeleteDC(hScreenDC);


    I have implemented both this methods in c# but same thing happens there.



    There are great resources like:



    Capture screenshot of hidden desktop



    take a screenshot of a desktop created using createdesktop api



    C# – SCREEN CAPTURE WITH VISTA DWM (SHARED DIRECT3D SURFACE)



    Window Contents Capturing using WM_PRINT Message



    how to capture screen from another desktop?(CreateDesktop)



    Also this is like a dead topic, No new article, Explanation or solution to it.



    I have read most of them but no luck, This was my closest try i think. Also language doesnt matter for me: C#, C++, Python or ... .










    share|improve this question


























      1












      1








      1








      I have created a second desktop using CreateDesktop and im not switching to it. Also i have created some processes in it like Explorer.exe and Winrar.exe. Next i have a code which takes Screenshot of current desktop to clipboard. Both CreateDesktop and Screenshot works, But Screenshot of that new desktop or window returns a black bitmap:



      This is the screenshot for a window in a desktop which returns current desktop:



      // hwnd is handle to winrar or ... created in a new desktop retrieved by EnumDesktopWindow
      RECT rc;
      GetClientRect(hwnd, &rc);
      const HDC hScreenDC = GetDC(nullptr);
      const HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
      const int width = GetDeviceCaps(hScreenDC, HORZRES);
      const int height = GetDeviceCaps(hScreenDC, VERTRES);
      const HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
      HBITMAP(SelectObject(hMemoryDC, hBitmap));
      BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);

      OpenClipboard(nullptr);
      EmptyClipboard();
      SetClipboardData(CF_BITMAP, hBitmap);
      CloseClipboard();

      DeleteDC(hMemoryDC);
      DeleteDC(hScreenDC);


      I have implemented both this methods in c# but same thing happens there.



      There are great resources like:



      Capture screenshot of hidden desktop



      take a screenshot of a desktop created using createdesktop api



      C# – SCREEN CAPTURE WITH VISTA DWM (SHARED DIRECT3D SURFACE)



      Window Contents Capturing using WM_PRINT Message



      how to capture screen from another desktop?(CreateDesktop)



      Also this is like a dead topic, No new article, Explanation or solution to it.



      I have read most of them but no luck, This was my closest try i think. Also language doesnt matter for me: C#, C++, Python or ... .










      share|improve this question
















      I have created a second desktop using CreateDesktop and im not switching to it. Also i have created some processes in it like Explorer.exe and Winrar.exe. Next i have a code which takes Screenshot of current desktop to clipboard. Both CreateDesktop and Screenshot works, But Screenshot of that new desktop or window returns a black bitmap:



      This is the screenshot for a window in a desktop which returns current desktop:



      // hwnd is handle to winrar or ... created in a new desktop retrieved by EnumDesktopWindow
      RECT rc;
      GetClientRect(hwnd, &rc);
      const HDC hScreenDC = GetDC(nullptr);
      const HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
      const int width = GetDeviceCaps(hScreenDC, HORZRES);
      const int height = GetDeviceCaps(hScreenDC, VERTRES);
      const HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
      HBITMAP(SelectObject(hMemoryDC, hBitmap));
      BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);

      OpenClipboard(nullptr);
      EmptyClipboard();
      SetClipboardData(CF_BITMAP, hBitmap);
      CloseClipboard();

      DeleteDC(hMemoryDC);
      DeleteDC(hScreenDC);


      I have implemented both this methods in c# but same thing happens there.



      There are great resources like:



      Capture screenshot of hidden desktop



      take a screenshot of a desktop created using createdesktop api



      C# – SCREEN CAPTURE WITH VISTA DWM (SHARED DIRECT3D SURFACE)



      Window Contents Capturing using WM_PRINT Message



      how to capture screen from another desktop?(CreateDesktop)



      Also this is like a dead topic, No new article, Explanation or solution to it.



      I have read most of them but no luck, This was my closest try i think. Also language doesnt matter for me: C#, C++, Python or ... .







      c++ screenshot desktop handle window-managers






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 9 at 12:55







      Aiden Stewart

















      asked Mar 9 at 9:03









      Aiden StewartAiden Stewart

      159210




      159210






















          1 Answer
          1






          active

          oldest

          votes


















          0














          I found the solution, It is interesting but no perfect, Just resolves my needs.



          After CreateDesktop by calling OpenDesktop then SetThreadDesktop then using the screenshot code you get the screenshot of the window which is created inside CreateDesktop, Also no need for Creating Explorer.exe inside it if you just want the window:



          CreateDesktopW(L"NewDesktop"); // CreateDesktop code here. This is my function
          const HDESK Handle = OpenDesktopW(L"NewDesktop", 0, 0, GENERIC_ALL);
          SetThreadDesktop(Handle);

          // Above ScreenShot code here ...


          The screenshot code needs a PrintWindow:



          RECT rc;
          GetClientRect(hwnd, &rc);
          const HDC hScreenDC = GetDC(nullptr);
          const HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
          const int width = GetDeviceCaps(hScreenDC, HORZRES);
          const int height = GetDeviceCaps(hScreenDC, VERTRES);
          const HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
          HBITMAP(SelectObject(hMemoryDC, hBitmap));
          BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);

          /// ADDED CODE
          PrintWindow(hWnd, hMemoryDC, PW_CLIENTONLY);
          ///

          OpenClipboard(nullptr);
          EmptyClipboard();
          SetClipboardData(CF_BITMAP, hBitmap);
          CloseClipboard();

          DeleteDC(hMemoryDC);
          DeleteDC(hScreenDC);


          Mine worked with a winrar.exe window inside a inactive desktop. You can try this then paste it to paint to see the result.



          There is just one thing, The whole area of the screenshot bitmap is black except the window handle that i want which is fine by me. I think i should get handle of every window from bottom to top in order then mix them up.



          All additions to this are appreciated.






          share|improve this answer

























            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55075688%2fcapture-screenshot-from-another-desktop%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            I found the solution, It is interesting but no perfect, Just resolves my needs.



            After CreateDesktop by calling OpenDesktop then SetThreadDesktop then using the screenshot code you get the screenshot of the window which is created inside CreateDesktop, Also no need for Creating Explorer.exe inside it if you just want the window:



            CreateDesktopW(L"NewDesktop"); // CreateDesktop code here. This is my function
            const HDESK Handle = OpenDesktopW(L"NewDesktop", 0, 0, GENERIC_ALL);
            SetThreadDesktop(Handle);

            // Above ScreenShot code here ...


            The screenshot code needs a PrintWindow:



            RECT rc;
            GetClientRect(hwnd, &rc);
            const HDC hScreenDC = GetDC(nullptr);
            const HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
            const int width = GetDeviceCaps(hScreenDC, HORZRES);
            const int height = GetDeviceCaps(hScreenDC, VERTRES);
            const HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
            HBITMAP(SelectObject(hMemoryDC, hBitmap));
            BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);

            /// ADDED CODE
            PrintWindow(hWnd, hMemoryDC, PW_CLIENTONLY);
            ///

            OpenClipboard(nullptr);
            EmptyClipboard();
            SetClipboardData(CF_BITMAP, hBitmap);
            CloseClipboard();

            DeleteDC(hMemoryDC);
            DeleteDC(hScreenDC);


            Mine worked with a winrar.exe window inside a inactive desktop. You can try this then paste it to paint to see the result.



            There is just one thing, The whole area of the screenshot bitmap is black except the window handle that i want which is fine by me. I think i should get handle of every window from bottom to top in order then mix them up.



            All additions to this are appreciated.






            share|improve this answer





























              0














              I found the solution, It is interesting but no perfect, Just resolves my needs.



              After CreateDesktop by calling OpenDesktop then SetThreadDesktop then using the screenshot code you get the screenshot of the window which is created inside CreateDesktop, Also no need for Creating Explorer.exe inside it if you just want the window:



              CreateDesktopW(L"NewDesktop"); // CreateDesktop code here. This is my function
              const HDESK Handle = OpenDesktopW(L"NewDesktop", 0, 0, GENERIC_ALL);
              SetThreadDesktop(Handle);

              // Above ScreenShot code here ...


              The screenshot code needs a PrintWindow:



              RECT rc;
              GetClientRect(hwnd, &rc);
              const HDC hScreenDC = GetDC(nullptr);
              const HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
              const int width = GetDeviceCaps(hScreenDC, HORZRES);
              const int height = GetDeviceCaps(hScreenDC, VERTRES);
              const HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
              HBITMAP(SelectObject(hMemoryDC, hBitmap));
              BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);

              /// ADDED CODE
              PrintWindow(hWnd, hMemoryDC, PW_CLIENTONLY);
              ///

              OpenClipboard(nullptr);
              EmptyClipboard();
              SetClipboardData(CF_BITMAP, hBitmap);
              CloseClipboard();

              DeleteDC(hMemoryDC);
              DeleteDC(hScreenDC);


              Mine worked with a winrar.exe window inside a inactive desktop. You can try this then paste it to paint to see the result.



              There is just one thing, The whole area of the screenshot bitmap is black except the window handle that i want which is fine by me. I think i should get handle of every window from bottom to top in order then mix them up.



              All additions to this are appreciated.






              share|improve this answer



























                0












                0








                0







                I found the solution, It is interesting but no perfect, Just resolves my needs.



                After CreateDesktop by calling OpenDesktop then SetThreadDesktop then using the screenshot code you get the screenshot of the window which is created inside CreateDesktop, Also no need for Creating Explorer.exe inside it if you just want the window:



                CreateDesktopW(L"NewDesktop"); // CreateDesktop code here. This is my function
                const HDESK Handle = OpenDesktopW(L"NewDesktop", 0, 0, GENERIC_ALL);
                SetThreadDesktop(Handle);

                // Above ScreenShot code here ...


                The screenshot code needs a PrintWindow:



                RECT rc;
                GetClientRect(hwnd, &rc);
                const HDC hScreenDC = GetDC(nullptr);
                const HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
                const int width = GetDeviceCaps(hScreenDC, HORZRES);
                const int height = GetDeviceCaps(hScreenDC, VERTRES);
                const HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
                HBITMAP(SelectObject(hMemoryDC, hBitmap));
                BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);

                /// ADDED CODE
                PrintWindow(hWnd, hMemoryDC, PW_CLIENTONLY);
                ///

                OpenClipboard(nullptr);
                EmptyClipboard();
                SetClipboardData(CF_BITMAP, hBitmap);
                CloseClipboard();

                DeleteDC(hMemoryDC);
                DeleteDC(hScreenDC);


                Mine worked with a winrar.exe window inside a inactive desktop. You can try this then paste it to paint to see the result.



                There is just one thing, The whole area of the screenshot bitmap is black except the window handle that i want which is fine by me. I think i should get handle of every window from bottom to top in order then mix them up.



                All additions to this are appreciated.






                share|improve this answer















                I found the solution, It is interesting but no perfect, Just resolves my needs.



                After CreateDesktop by calling OpenDesktop then SetThreadDesktop then using the screenshot code you get the screenshot of the window which is created inside CreateDesktop, Also no need for Creating Explorer.exe inside it if you just want the window:



                CreateDesktopW(L"NewDesktop"); // CreateDesktop code here. This is my function
                const HDESK Handle = OpenDesktopW(L"NewDesktop", 0, 0, GENERIC_ALL);
                SetThreadDesktop(Handle);

                // Above ScreenShot code here ...


                The screenshot code needs a PrintWindow:



                RECT rc;
                GetClientRect(hwnd, &rc);
                const HDC hScreenDC = GetDC(nullptr);
                const HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
                const int width = GetDeviceCaps(hScreenDC, HORZRES);
                const int height = GetDeviceCaps(hScreenDC, VERTRES);
                const HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
                HBITMAP(SelectObject(hMemoryDC, hBitmap));
                BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);

                /// ADDED CODE
                PrintWindow(hWnd, hMemoryDC, PW_CLIENTONLY);
                ///

                OpenClipboard(nullptr);
                EmptyClipboard();
                SetClipboardData(CF_BITMAP, hBitmap);
                CloseClipboard();

                DeleteDC(hMemoryDC);
                DeleteDC(hScreenDC);


                Mine worked with a winrar.exe window inside a inactive desktop. You can try this then paste it to paint to see the result.



                There is just one thing, The whole area of the screenshot bitmap is black except the window handle that i want which is fine by me. I think i should get handle of every window from bottom to top in order then mix them up.



                All additions to this are appreciated.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Mar 9 at 12:58

























                answered Mar 9 at 12:14









                Aiden StewartAiden Stewart

                159210




                159210





























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55075688%2fcapture-screenshot-from-another-desktop%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Save data to MySQL database using ExtJS and PHP [closed]2019 Community Moderator ElectionHow can I prevent SQL injection in PHP?Which MySQL data type to use for storing boolean valuesPHP: Delete an element from an arrayHow do I connect to a MySQL Database in Python?Should I use the datetime or timestamp data type in MySQL?How to get a list of MySQL user accountsHow Do You Parse and Process HTML/XML in PHP?Reference — What does this symbol mean in PHP?How does PHP 'foreach' actually work?Why shouldn't I use mysql_* functions in PHP?

                    Compiling GNU Global with universal-ctags support Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Data science time! April 2019 and salary with experience The Ask Question Wizard is Live!Tags for Emacs: Relationship between etags, ebrowse, cscope, GNU Global and exuberant ctagsVim and Ctags tips and trickscscope or ctags why choose one over the other?scons and ctagsctags cannot open option file “.ctags”Adding tag scopes in universal-ctagsShould I use Universal-ctags?Universal ctags on WindowsHow do I install GNU Global with universal ctags support using Homebrew?Universal ctags with emacsHow to highlight ctags generated by Universal Ctags in Vim?

                    Add ONERROR event to image from jsp tldHow to add an image to a JPanel?Saving image from PHP URLHTML img scalingCheck if an image is loaded (no errors) with jQueryHow to force an <img> to take up width, even if the image is not loadedHow do I populate hidden form field with a value set in Spring ControllerStyling Raw elements Generated from JSP tagds with Jquery MobileLimit resizing of images with explicitly set width and height attributeserror TLD use in a jsp fileJsp tld files cannot be resolved