请教各位,我这个程序为什么执行不成功,就算有时候成功一次,也是全黑的截图,谢谢
#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;
}
我是屏幕截图