如何在C+中获取作为位图对象的窗口屏幕截图+;? 如何在C++中获取窗口作为位图对象的截图?假设我已经有窗户把手了我还想知道,当窗口处于最小化状态时,是否有可能获取其屏幕截图

如何在C+中获取作为位图对象的窗口屏幕截图+;? 如何在C++中获取窗口作为位图对象的截图?假设我已经有窗户把手了我还想知道,当窗口处于最小化状态时,是否有可能获取其屏幕截图,c++,windows,visual-c++,bitmap,window,C++,Windows,Visual C++,Bitmap,Window,这里的C++指VC++以及与Windows XP+(win32)关联的所有库。您应该调用PrintWindow API: void CScreenShotDlg::OnPaint() { // device context for painting CPaintDC dc(this); // Get the window handle of calculator application. HWND hWnd = ::FindWindow( 0, _T( "Cal

这里的C++指VC++以及与Windows XP+(win32)关联的所有库。

您应该调用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 );
}
见这个问题:

如果您不使用MFC,这里是纯打印窗口签名:

BOOL PrintWindow(
    HWND hwnd,
    HDC hdcBlt,
    UINT nFlags
);
有关更多详细信息,请参阅MSDN:

关于如何将其保存为位图,asMatteo说,这取决于您使用的实际框架

编辑:

这里是原始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;
}
#定义_WIN32_WINNT 0x0501//xp
#包括
int main()
{ 
RECT-rc;
HWND HWND=FindWindow(文本(“记事本”),NULL);//窗口不能为最小值
if(hwnd==NULL)
{

cout如果有人对获取最小化窗口的PrintWindow图片感兴趣,您可以在这里了解如何完成这项工作:


快乐编码;

> Pr.PtWiDWOW与FrimeBuffor一起工作。我尝试了IE截图。打开新的链接,并尝试获得图片。它将显示先前链接的图片。

C++语言不提供任何“位图对象”……您使用任何图形工具包(MFC/WTL/WXWIDGET/…)或者你只是想要一个
HBITMAP
?我指的是VC++,带有与Windows相关联的库哦,不,我指的是只有win32api&可能是这样的MFC@Davide:tks,但在MSDN库(MSDN.microsoft.com)中找不到函数PrintWindow的说明@Paul:只有在正确处理
WM_PRINT
的情况下,你才可以使用
PrintWindow
截图最小化窗口,否则你就倒霉了。我建议使用GetWindowRect而不是GetClientRect,以使它在windows7或具有厚边框的vista上运行得更好。这是有区别的,这取决于他是否想要客户端只有一个或整个窗口。谢谢你指出:)@davide:上面的代码可以拍摄一些窗口(如Chrome、Notepad等)的完整详细屏幕截图,但与其他一些窗口(如visualstudio IDE窗口等)相比,屏幕截图的某些部分完全是黑色的!发生了什么事?在我看来,这足以成为一个答案,尽管不是很长.