• <small id='VWf1R'></small><noframes id='VWf1R'>

  • <tfoot id='VWf1R'></tfoot>
      <legend id='VWf1R'><style id='VWf1R'><dir id='VWf1R'><q id='VWf1R'></q></dir></style></legend>
        • <bdo id='VWf1R'></bdo><ul id='VWf1R'></ul>

        <i id='VWf1R'><tr id='VWf1R'><dt id='VWf1R'><q id='VWf1R'><span id='VWf1R'><b id='VWf1R'><form id='VWf1R'><ins id='VWf1R'></ins><ul id='VWf1R'></ul><sub id='VWf1R'></sub></form><legend id='VWf1R'></legend><bdo id='VWf1R'><pre id='VWf1R'><center id='VWf1R'></center></pre></bdo></b><th id='VWf1R'></th></span></q></dt></tr></i><div id='VWf1R'><tfoot id='VWf1R'></tfoot><dl id='VWf1R'><fieldset id='VWf1R'></fieldset></dl></div>

        如何在 C++ 中将窗口的屏幕截图作为位图对象获取?

        时间:2023-06-03
        <legend id='gq1Eg'><style id='gq1Eg'><dir id='gq1Eg'><q id='gq1Eg'></q></dir></style></legend>

        1. <i id='gq1Eg'><tr id='gq1Eg'><dt id='gq1Eg'><q id='gq1Eg'><span id='gq1Eg'><b id='gq1Eg'><form id='gq1Eg'><ins id='gq1Eg'></ins><ul id='gq1Eg'></ul><sub id='gq1Eg'></sub></form><legend id='gq1Eg'></legend><bdo id='gq1Eg'><pre id='gq1Eg'><center id='gq1Eg'></center></pre></bdo></b><th id='gq1Eg'></th></span></q></dt></tr></i><div id='gq1Eg'><tfoot id='gq1Eg'></tfoot><dl id='gq1Eg'><fieldset id='gq1Eg'></fieldset></dl></div>

            <small id='gq1Eg'></small><noframes id='gq1Eg'>

            • <tfoot id='gq1Eg'></tfoot>

                <tbody id='gq1Eg'></tbody>

                  <bdo id='gq1Eg'></bdo><ul id='gq1Eg'></ul>
                • 本文介绍了如何在 C++ 中将窗口的屏幕截图作为位图对象获取?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  如何在 C++ 中将窗口的屏幕截图作为位图对象获取?假设我已经有了窗口句柄.我还想知道是否可以在窗口处于最小化状态时获取屏幕截图?

                  How to get screenshot of a window as bitmap object in C++? Supposed that I already have the window handle. And I want to know also whether it's possible to get the screenshot of a window when it's in minimized state?

                  这里的 C++ 是指 VC++ 以及与 Windows XP+ (win32) 相关的所有库.

                  C++ here means VC++ with all the libraries associated with Windows XP+ (win32).

                  推荐答案

                  你应该调用 PrintWindow API:

                  you should call the PrintWindow API:

                  void CScreenShotDlg::OnPaint()
                  {
                      // device context for painting
                      CPaintDC dc(this);
                  
                      // Get the window handle of calculator application.
                      HWND hWnd = ::FindWindow( 0, _T( "Calculator" ));
                  
                      // Take screenshot.
                      PrintWindow( hWnd,
                                   dc.GetSafeHdc(),
                                   0 );
                  }
                  

                  看到这个问题:获取窗口截图windows API

                  如果你不使用 MFC,这里是纯 PrintWindow 签名:

                  if you are not using MFC, here the pure PrintWindow signature:

                  BOOL PrintWindow(
                      HWND hwnd,
                      HDC hdcBlt,
                      UINT nFlags
                  );
                  

                  有关更多详细信息,请参阅 MSDN:http:///msdn.microsoft.com/en-us/library/dd162869(v=vs.85).aspx

                  see MSDN for more details: http://msdn.microsoft.com/en-us/library/dd162869(v=vs.85).aspx

                  关于如何像Matteo所说的那样将其保存为位图取决于您使用的实际框架...

                  about how to save it as bitmap asMatteo said depends on the actual framework you are using...

                  这里是原始 C++ 中的完整示例

                  here full example in raw C++

                  #define _WIN32_WINNT    0x0501        //xp
                  #include <windows.h>
                  
                  int main()
                  { 
                      RECT rc;
                      HWND hwnd = FindWindow(TEXT("Notepad"), NULL);    //the window can't be min
                      if (hwnd == NULL)
                      {
                          cout << "it can't find any 'note' window" << endl;
                          return 0;
                      }
                      GetClientRect(hwnd, &rc);
                  
                      //create
                      HDC hdcScreen = GetDC(NULL);
                      HDC hdc = CreateCompatibleDC(hdcScreen);
                      HBITMAP hbmp = CreateCompatibleBitmap(hdcScreen, 
                          rc.right - rc.left, rc.bottom - rc.top);
                      SelectObject(hdc, hbmp);
                  
                      //Print to memory hdc
                      PrintWindow(hwnd, hdc, PW_CLIENTONLY);
                  
                      //copy to clipboard
                      OpenClipboard(NULL);
                      EmptyClipboard();
                      SetClipboardData(CF_BITMAP, hbmp);
                      CloseClipboard();
                  
                      //release
                      DeleteDC(hdc);
                      DeleteObject(hbmp);
                      ReleaseDC(NULL, hdcScreen);
                  
                      cout << "success copy to clipboard, please paste it to the 'mspaint'" << endl;
                  
                      return 0;
                  }
                  

                  这篇关于如何在 C++ 中将窗口的屏幕截图作为位图对象获取?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:memset() 或值初始化以将结构归零? 下一篇:MSVC -Wall 标准标题中的数千条警告是怎么回事?

                  相关文章

                • <tfoot id='QXXfr'></tfoot>

                  1. <small id='QXXfr'></small><noframes id='QXXfr'>

                      <bdo id='QXXfr'></bdo><ul id='QXXfr'></ul>
                    <legend id='QXXfr'><style id='QXXfr'><dir id='QXXfr'><q id='QXXfr'></q></dir></style></legend>
                    <i id='QXXfr'><tr id='QXXfr'><dt id='QXXfr'><q id='QXXfr'><span id='QXXfr'><b id='QXXfr'><form id='QXXfr'><ins id='QXXfr'></ins><ul id='QXXfr'></ul><sub id='QXXfr'></sub></form><legend id='QXXfr'></legend><bdo id='QXXfr'><pre id='QXXfr'><center id='QXXfr'></center></pre></bdo></b><th id='QXXfr'></th></span></q></dt></tr></i><div id='QXXfr'><tfoot id='QXXfr'></tfoot><dl id='QXXfr'><fieldset id='QXXfr'></fieldset></dl></div>