Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用c++;? [P>(输入图像描述这里)[1 ] ](1)我试图用C++来捕获Win32中的活动窗口。使用BitBlt功能,我可以捕获,但是一旦另一个窗口打开,我已经捕获的同一个窗口应该只被捕获。我不要我打开的另一扇窗户,它应该是黑色的。有人能帮忙解决吗_C++_Winapi - Fatal编程技术网

如何使用c++;? [P>(输入图像描述这里)[1 ] ](1)我试图用C++来捕获Win32中的活动窗口。使用BitBlt功能,我可以捕获,但是一旦另一个窗口打开,我已经捕获的同一个窗口应该只被捕获。我不要我打开的另一扇窗户,它应该是黑色的。有人能帮忙解决吗

如何使用c++;? [P>(输入图像描述这里)[1 ] ](1)我试图用C++来捕获Win32中的活动窗口。使用BitBlt功能,我可以捕获,但是一旦另一个窗口打开,我已经捕获的同一个窗口应该只被捕获。我不要我打开的另一扇窗户,它应该是黑色的。有人能帮忙解决吗,c++,winapi,C++,Winapi,void CaptureActiveWindow(void) { 直截了当; WCHAR buf[100],buf1[20]; int xSrc=0,ySrc=-19; int DepcWidth=10,DepcHeight=5; OutputDebugString(L“开始捕获动作窗口”); HDC ActWndDC=GetDC(hWndActWnd);//您单击的窗口的DC MemDC=CreateCompatibleDC(ActWndDC);//与上述DC兼容的内存DC GetWindow

void CaptureActiveWindow(void)
{
直截了当;
WCHAR buf[100],buf1[20];
int xSrc=0,ySrc=-19;
int DepcWidth=10,DepcHeight=5;
OutputDebugString(L“开始捕获动作窗口”);
HDC ActWndDC=GetDC(hWndActWnd);//您单击的窗口的DC
MemDC=CreateCompatibleDC(ActWndDC);//与上述DC兼容的内存DC
GetWindowRect(hWndActWnd,&ActWndRect);//将存储矩形中的窗口
wsprintf(buf,L“x1=%d,y1=%d,x2=%d y2=%d”,ActWndRect.left,ActWndRect.top,ActWndRect.right,ActWndRect.bottom);
OutputDebugString(buf);
int Width=ActWndRect.right-ActWndRect.left;//窗口的宽度
int Height=ActWndRect.bottom-ActWndRect.top;//窗口的高度
如果(GetWindowText(hWndActWnd,buf1,20)>0)
{
OutputDebugString(buf1);
}
if(捕获控制)
{
ySrc=DepcWidth=DepcHeight=0;
}
HBITMAP HBITMAP=CreateCompatibleBitmap(DlgDC,宽-深-宽,高-深);//将创建与窗口兼容的位图
选择对象(MemDC、hBitmap);
BitBlt(MemDC,0,0,Width,Height,ActWndDC,xSrc,ySrc,SRCCOPY);//将窗口复制到MemDC中
//BitBlt(DeskDC,110110,宽度,高度,MemDC,Begpt.x,Begpt.y,SRCCOPY);
SaveBitmap(MemDC,hBitmap,“Sample.bmp”);//将DC保存到.bmp文件中
ShowImage();//将在MSPAINT中显示.bmp文件。
}

在将活动消息发送到窗口之前钩住鼠标事件。使用WindowFromPoint获取指定的窗口(Hwnd)。然后使用GetWindowRect获取窗口rect区域。在该区域中,为rect中的所有点调用WindowFromPoint,将其与Hwnd(如果它是子窗口或不是子窗口)进行比较,并获得重叠rect。获取捕获窗口的位图后,然后覆盖覆盖矩形上的黑色

PS:我遇到BITMAPINFO错误:运行时检查失败#2-变量周围的堆栈已损坏。 提供解决方案


除非禁用Chrome的硬件加速选项,否则无法使用
BitBlt()
捕获Chrome的图像。但是
PrintWindow()
与PW_RENDERFULLCONTENT标志一起使用。使用时,中间的图像将有一个黑色边框。使用PrintWindow(hWndActWnd,ActWndDC,0x00000003)时,将图像向左对齐。然后修改
CreateCompatibleBitmap()
cx
cy
,您可以轻松删除边框。

邵:您好,在上面的qusetion描述中,我添加了一个图像,请检查。最初选择单个窗口后,出现了(即快速访问)在我尝试在上面添加另一个窗口后,它变成了空白。我想要的行为。请查看它。tahnk you@Jeffrey Shao:我想捕获特定的窗口,即使它在这两种情况下都是隐藏和活动的。你能帮我吗?对不起,我误解了你的意思。单击窗口时,此窗口将变为活动的,您只能捕获整个窗口。我们也不能裁剪位图。您的想法可能无法实现。@Jeffrey Shao:很抱歉,如果一个窗口被隐藏,通常意味着该窗口上已经存在任何其他窗口(我们要捕获的窗口)。窗口上已经存在的另一个窗口(您要捕获的窗口)该窗口(位于要捕获的窗口顶部的另一个窗口)应变为黑色,中间的任何弹出窗口也应变为黑色。我在下一条评论中给出另一个案例,请检查。@Jeffrey Shao:另一个案例是在捕获窗口时,如果您尝试将任何其他窗口置于捕获窗口的顶部,那么其他窗口也应变为黑色,或者我们甚至不允许任何捕获窗口的操作。在我的问题描述中,我给出了一张图片,当我试图在捕获窗口上打开另一个窗口时,另一个窗口变黑了。