2014-01-23 3 views
1

제목에서 말했듯이 최소화 된 창에서 이미지를 캡처하고 싶습니다 ... 가능합니까? 윈도우가 최소화되지 않은 한 msdn의 CaptureAnImage을 사용하고 작동합니다.최소화 된 창에서 이미지 캡처

내가 시도한 한 가지 해결책은 이미지를 캡처하고 이미지를 캡처 한 다음 원래 상태로 되 돌리는 것입니다.

WINDOWPLACEMENT wInfo; 
UINT originalPlacement; 

GetWindowPlacement(hWnd, &wInfo); 
originalPlacement = wInfo.showCmd; 

wInfo.showCmd = SW_MAXIMIZE; 
SetWindowPlacement(hWnd, &wInfo); 
wInfo.showCmd = originalPlacement; 

CaptureAnImage(hWnd); // Capture the image while it's maximized 

SetWindowPlacement(hWnd, &wInfo); 

그래서 여기에 내가 이러한 솔루션 중 하나를 찾고 있어요 :

을 만 문제는 애니메이션이 추한 외모와 내가 대안을 찾으려면입니다 ... 여기에 내가 그것을 시도하는 방법이다 최소화 된 상태에서도 이미지를 포착 할 수 있습니까?

또는

는 그것을 극대화 할 수있을 것인가, 그것은, 다음에 반환 캡처 애니메이션의 종류를 표시하지 않고 원래의 상태는?

PS : 나는 link 나의 문제를 검색하는 동안 찾았지만

답변

5

당신은 최소화 된 창을 캡처 할 수 없습니다 ... 그것은 C#에서 그리고 나는 그것이 C++에서 작동 할 수없는거야, 당신은 그것을 복원해야합니다 먼저. 그러나 사용자가 화면을 볼 수는 없지만 OS는 알 수 있도록 선택적으로 꺼내거나 알파 투명도 1로 복원 할 수 있습니다. SystemParametersInfo(SPI_SETANIMATION)을 사용하여 애니메이션 복원/최소화를 일시적으로 비활성화하십시오 (SPI_GETANIMATION보고 애니메이션을 사용하는 경우에만 수행). 그러면 창을 표시 한 다음 다시 숨기기 위해 필요한 시간을 단축 할 수 있습니다. 예를 들어

:

WINDOWPLACEMENT wp = {0}; 
wp.length = sizeof(WINDOWPLACEMENT); 
GetWindowPlacement(hWnd, &wp); 

ANIMATIONINFO ai = {0}; 
bool restoreAnimated = false; 

if (wp.showCmd == SW_SHOWMINIMIZED) 
{ 
    ai.cbSize = sizeof(ANIMATIONINFO); 
    SystemParametersInfo(SPI_GETANIMATION, sizeof(ANIMATIONINFO), &ai, 0); 

    if (ai.iMinAnimate != 0) 
    { 
     ai.iMinAnimate = 0; 
     SystemParametersInfo(SPI_SETANIMATION, sizeof(ANIMATIONINFO), &ai, 0); 
     restoreAnimation = true; 
    } 

    // optionally move the window off-screen, or 
    // apply alpha using SetLayeredWindowAttributes()... 

    ShowWindow(hWnd, SW_SHOWNOACTIVATE); 
} 

// capture as needed ... 

if (wp.showCmd == SW_SHOWMINIMIZED) 
{ 
    SetWindowPlacement(hWnd, &wp); 

    // optionally remove alpha using SetLayeredWindowAttributes()... 

    if (restoreAnimation) 
    { 
     ai.iMinAnimate = 1; 
     SystemParametersInfo(SPI_SETANIMATION, sizeof(ANIMATIONINFO), &ai, 0); 
    } 
} 
+0

내가 말했듯이,'SystemParametersInfo()'이 사용. 'SPI_GETANIMATION'은 현재 애니메이션 상태를 가져오고,'SPI_SETANIMATION'은 그것을 바꿉니다. –

관련 문제