C++截图问题,请求解答

请教各位,我这个程序为什么执行不成功,就算有时候成功一次,也是全黑的截图,谢谢
#pragma once
#pragma once
#include"stdafx.h"
#pragma warning(disable:4996)

class 光栅操作
{
public:

光栅操作()
{
    屏幕高 = GetSystemMetrics(SM_CXSCREEN);
    屏幕宽 = GetSystemMetrics(SM_CYSCREEN);
}
void BinBack(HWND Hwnd)//绑定窗口
{
    if (Hwnd)
    {
        /*-------------------------------------------------------*/
        GratingHWND = Hwnd;
        GetWindowRect(GratingHWND, &GratingHWNDXY);
        GratingHWNDW = GratingHWNDXY.right - GratingHWNDXY.left;//窗口的宽度
        GratingHWNDH = GratingHWNDXY.bottom - GratingHWNDXY.top;//窗口的高度

        MemoryDC·DIB = CreateCompatibleDC(0);//让内存DC和系统兼容起来
        
    }
    
    
    
}
VOID SetIntercept(WORD InterceptX, WORD InterceptY, WORD InterceptW, WORD InterceptH)//截取图片
{
    DeleteObject(HDIBITMAP);
    
/*-------------------------------------------------------*/
    GratingInterceptX = InterceptX;
    GratingInterceptY = -InterceptY;
    GratingInterceptW = InterceptW;
    GratingInterceptH = InterceptH;

    单行存储字节 = GratingInterceptW * 4;

    DIBITMAPINFO = { 0 };
    //定义位图头文件
    DIBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    DIBITMAPINFO.bmiHeader.biWidth = GratingInterceptW;
    DIBITMAPINFO.bmiHeader.biHeight = GratingInterceptH;
    DIBITMAPINFO.bmiHeader.biPlanes = 1;
    DIBITMAPINFO.bmiHeader.biBitCount = 32;//32位真彩色
    DIBITMAPINFO.bmiHeader.biCompression = BI_RGB;//RGB颜色
    DIBITMAPINFO.bmiHeader.biSizeImage = GratingInterceptW * GratingHWNDH * 4;//虚拟图片的大小
    DIBITMAPINFO.bmiHeader.biClrImportant = 0;

    HDIBITMAP = CreateDIBSection(0, &DIBITMAPINFO, DIB_RGB_COLORS, (VOID**)&显存指针, NULL, 0);//GreateDIBSection()返回一个虚拟的图片给HDIBITMAP
    SelectObject(MemoryDC·DIB/*画笔*/, HDIBITMAP/*画布*/);//链接内存DC


    显存指针 = DIBITMAPINFO.bmiHeader.biSizeImage;
}
VOID InterceptGrating()//把原本的数据传到内存DC里面
{
    ReleaseDC(GratingHWND, EqualpmentDC·Intercept);//释放DC
    ReleaseDC(NULL,EqualpmentDC·Intercept);
    /*-------------------------------------------------------*/    
    BitBlt(MemoryDC·DIB, 0, 0, GratingInterceptW, GratingInterceptH, EqualpmentDC·Intercept, GratingInterceptX, GratingInterceptY, SRCCOPY);
}
CHAR DrawGrating(HWND 画布, WORD 起点X, WORD 起点Y, WORD InterceptW, WORD InterceptH, WORD InterceptX, WORD InterceptY)
{

    ReleaseDC(画布窗口, 设备DC·Show);
    
    画布窗口 = (HWND)画布;
    设备DC·Show = GetDC(画布窗口);
    BitBlt(设备DC·Show, 起点X, 起点Y, InterceptW, InterceptH, MemoryDC·DIB, InterceptX, InterceptY, SRCCOPY);
    /*cout<<"-------------------------------" << endl;
    cout << GratingHWND << endl*/;
    return 0;
}

HWND 画布窗口 = 0;
BYTE 显存指针 = 0;
HBITMAP HDIBITMAP = 0;//虚拟图片
BITMAPINFO DIBITMAPINFO = { 0 };//DIB位图结构
WORD 单行存储字节;
HDC MemoryDC·DIB;//系统无关位图内存DC
HDC EqualpmentDC·Intercept;//原本是设备DC
HDC 设备DC·Show;//显示DC
RECT GratingHWNDXY;
HWND GratingHWND;
WORD GratingHWNDH;
WORD GratingHWNDW;
WORD GratingInterceptX;//截取的起点X坐标
WORD GratingInterceptY;//截取的起点Y坐标
WORD GratingInterceptW;//截取的宽度
WORD GratingInterceptH;//截取的高度
WORD 屏幕宽 = 0;
WORD 屏幕高 = 0;

};
int main() {

//GrabLattice();
光栅操作 MyGrating;
MyGrating.BinBack((HWND)0X00050562);
MyGrating.SetIntercept(50, 50, 300, 300);
while (true)
{

    MyGrating.InterceptGrating();
    MyGrating.DrawGrating(0, 500, 500, 500, 500, 500, 500);
    Sleep(20);
}

//Sleep(20000);
return 0;

}

我是屏幕截图