2009-04-17 6 views
2

표시되지 않는 창 축소 그림을 가져 오려고합니다. 여기 배경 창 축소판 가져 오기

내가 결국 얻을 수있는 모든 창을 통해 루프 EnumWindows를 사용하려면, WindowProc는하지만, 핸들을 얻을 수 FindWindow를 사용하여 직접 호출되고, 내가 지금까지

BOOL CALLBACK WindowProc(HWND hWnd, LPARAM lParam) 
{ 
    RECT WindRect; 
    GetWindowRect(hWnd, &WindRect) 
    CurrentScreenShot->Next = new ScreenShotList(); 
    CurrentScreenShot = CurrentScreenShot->Next; 

    HDC SourceDC = GetDC(hWnd); 
    HDC TargetDC = CreateCompatibleDC(SourceDC); 
    CurrentScreenShot->ScreenShot = CreateCompatibleBitmap(SourceDC, WindRect.right - WindRect.left, WindRect.bottom - WindRect.top); 

    BitBlt(TargetDC, 0, 0, WindRect.right - WindRect.left, WindRect.bottom - WindRect.top, SourceDC, 0, 0, SRCCOPY); 

    ReleaseDC(hWnd, SourceDC); 

    g_iWindows++; 
    return TRUE; 
} 

지금 가지고있는 코드입니다 축소판을 링크 된 목록에 저장합니다.

WindowProc(FindWindow(NULL, L"File Explorer"), 0); 

이 코드는 DLL에 있으며 C# Forms 응용 프로그램에서 호출됩니다. 현재 C# 응용 프로그램은 비트 맵을 가져 와서 파일에 저장합니다.

FindWindow을 사용하면 표시되는 창 (C# 응용 프로그램이 될 수도 있음)을 얻지 않으면 그림이 검정 상자가됩니다.

배경 창 그림을 얻을 수 있습니까?

편집 : 당신이 DC에서 콘텐츠를 얻을 수없는 이유는 보이지 않는 윈도우 동안 진행에는 다시 그리기가 없습니다 윈도우 모바일 응용 프로그램

+0

코드에서 InvalidateRect()를 호출하여 백그라운드 창을 강제로 다시 그렸습니다. – Kluge

+0

InvalidateRect를 호출하기 전에 창에 대해 DC를 가져오고 BitBlt 전에 시도했습니다. 나는 또한 WM_PAINT 메시지를 보내려고했으나 그 중 하나를하지 않았다. – zort15

답변

0

이다는 이잖아. WM_PRINT 메시지를 대상 창에 보내어 해당 내용을 DC에 가져 오도록 요청하십시오.

편집 :

미안, 난은 Windows Mobile 용이었다 통지를하지 않았다. WM_PRINT 이외에 보이지 않는 창의 내용을 가져 오는 방법을 모르겠습니다. 물론 윈도우를 보여줄 수 있으며, 다른 윈도우에 덮여 있지 않은지 확인한 다음 가지고있는 코드를 실행할 수 있습니다.하지만 아마도 약간 지저분 할 것입니다.

+0

응답 해 주셔서 감사합니다. Unfortunatley, 나는 WM_PRINT 메시지를 지원하지 않는 Windows Mobile 용으로이 글을 쓰고 있습니다. Windows Mobile에 상응하는 프로그램이 있는지 알고 있습니까? 나는 인터넷 검색을했는데 찾을 수 없었다. – zort15