C++ 如何获取覆盖窗口的像素?

C++ 如何获取覆盖窗口的像素?,c++,c,winapi,C++,C,Winapi,我在Visual Studio 2008上使用WindowsXP,学习C++。br> 我对从桌面获取像素很好奇。 如果窗口被另一个窗口覆盖,是否可以使用GetPixel功能获取屏幕像素?在窗口被覆盖的状态下,我试图调用GetPixel: GetPixel(hdc, x, y); 但是这个调用不会检索原始窗口的像素,而是检索覆盖窗口或其他彩色窗口的像素 如何获取覆盖窗口的像素 我添加我的代码如下 VOID GetDisplay(HWND& hwnd, RECT& area, CO

我在Visual Studio 2008上使用WindowsXP,学习C++。br> 我对从桌面获取像素很好奇。
如果窗口被另一个窗口覆盖,是否可以使用
GetPixel
功能获取屏幕像素?在窗口被覆盖的状态下,我试图调用
GetPixel

GetPixel(hdc, x, y);
但是这个调用不会检索原始窗口的像素,而是检索覆盖窗口或其他彩色窗口的像素

如何获取覆盖窗口的像素

我添加我的代码如下

VOID GetDisplay(HWND& hwnd, RECT& area, COLORREF (*display)[1000]) {
    HDC hdc=GetDC(hwnd);
    for(INT x=area.left;x<=area.right;x++) {
        for(int y=area.top;y<=area.bottom;y++) {
            display[x][y]=GetPixel(hdc, x, y);
        }
    }
    ReleaseDC(hwnd, hdc);
}


...

SetWindowPos(hwnd, HWND_TOPMOST, 300, 300, 500, 350, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
SetForegroundWindow(hwnd);
SetActiveWindow(hwnd);
//EnableWindow(hwnd, TRUE);
SetFocus(hwnd);


GetDisplay(hwnd, within_wall, display);//trouble
VOID GetDisplay(HWND&HWND,RECT&area,COLORREF(*显示)[1000]){
HDC HDC=GetDC(hwnd);

对于(INT x=area.left;x来说,没有100%的方法可以做到这一点,因为窗口不需要也通常不需要绘制模糊区域。当然,您将无法使桌面成为前景窗口。而且焦点对可见性没有影响,正如有人提到的
SetFocus
。这将是无效的

我看到过使用
WM_PRINT
访问模糊像素的建议。同样,这是不保证的,但桌面窗口非常具体,因此如果你让它工作起来,我想它会有点可靠

有关此方面的详细信息,请参阅:


值得一提的是,
GetPixel
的速度非常慢。您可能会注意到代码中存在性能问题。通过使用类似的方法,您可以获得更好的性能。

您可以先聚焦窗口:)我这样做了,但无法得到结果。SetWindowPos(hwnd,hwnd_TOPMOST,300300500350,SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);SetForegroundWindow(hwnd);//SetActiveWindow(hwnd);//EnableWindow(hwnd,TRUE);SetFocus(hwnd);请将此代码添加到您的原始帖子中。很奇怪,我认为SetFocus+GetPixel应该完成这项工作。看起来我们需要更深入一些……VOID GetDisplay(HWND&HWND、RECT&area、COLORREF(*显示)[1000]){HDC HDC=GetDC(HWND);用于(INT x=area.left;xPrintWindow输出屏幕像素的结果。我想将屏幕像素的结果读入变量或hdc或数组。我将屏幕像素读入内存设备上下文,将内存dc的结果像素颜色读入数组。但数组的结果是每个元素都是黑色的