2009-07-16 2 views
4

내 응용 프로그램은 동적으로 생성 된 여러 양식의 스크린 샷을 자동화합니다. 이것은 Windows XP에서 완벽하게 작동하지만 Vista Aero에서는 잘 작동하지 않습니다. 양식의 대부분은 스크린 샷에서 반투명으로 나타납니다. 문제는 Aero의 창 애니메이션에 있습니다.Vista Aero에서 프로그래밍 방식으로 창 애니메이션을 사용하지 않도록 설정하는 방법은 무엇입니까?

Delphi (2007+) 프로그램 내부에서이 애니메이션을 확인/비활성화/활성화하려면 어떻게합니까?

또는 대안 : 스크린 샷을 만들기 전에 양식이 올바르게 표시되는지 어떻게 확인합니까?

+3

하지 델파이하지만 우리는 여기에 비슷한 질문이 http://stackoverflow.com/questions/280480/enabling-disabling-aero-from-a-windows-service – Shoban

+0

힌트를 주셔서 감사합니다. 내가 찾았을 때까지 VCL 내부를 조금씩 검색했습니다. 항상 그렇듯이 Delphi는 DWMApi를 구현했으며 부울 속성을 설정하는 것만 큼 쉽습니다. –

+0

어떤 속성입니까? –

답변

0

Shoban의 코멘트 링크는 올바른 방향으로 나를 이끌었습니다. 빠른 검사는 VCL에서 DwmApi에 대한 래퍼를 보여 주었고 곧바로 앞으로 나아갔습니다. 여기가 성공적으로 지금 사용하는 코드입니다 :

uses DwmApi; 
... 
    SaveDwmCompositionEnabled := DwmCompositionEnabled; 
    if SaveDwmCompositionEnabled then 
    DwmEnableComposition(DWM_EC_DISABLECOMPOSITION); 
... 
    if SaveDwmCompositionEnabled then 
    DwmEnableComposition(DWM_EC_ENABLECOMPOSITION); 
+1

나는이 솔루션을 정말로 좋아하지 않습니다. 데스크톱 구성 기능을 사용 중지하는 것은이 질문을하는 다른 사용자에게 도움이되는 것이 아닙니다. 애니메이션 시간은 시스템에서 구성 할 수 있다고 가정하지만 200ms라고 가정합니다. OnShow에서 200ms 타이머를 시작하여 스크린 샷을 찍습니다. OnClose가 실행될 때 타이머가 계속 실행 중이면 스크린 샷을 찍습니다. –

+0

그것은 실제로 가능합니다. Althoug, 내가 사용하는 스크린 샷의 수와 전단 수 때문에 많이 사용되는 시간이 늘어날 것이므로 나는 그것을하지 않을 것이다. 하지만 적어도 옵션입니다. –

1

에어로 유감 것 해제하지 않고 응용 프로그램이 실행되도록 할 Vista를 알리기 위해, EXE 파일에 매니페스트 리소스를 추가 할 수 있습니다 - 일반적으로는 변경 좋은 생각이 아니다 사용자의 UI 스타일 선택.

다른 방법으로 양식을 그릴 수 있습니다. 한 가지 염두에 두어야 할 것은 캔버스에 페인트하기 위해 PaintTo 메서드를 사용하는 것입니다. 폼의 스크린 샷을 폼의 형태로 가져 오는 경우 폼을 전혀 표시 할 필요가 없습니다. Visible을 false로 설정하여 만든 다음 비트 맵에 그립니다. 사용자가 그들과 상호 작용해야 할 필요가 있다면 보여주십시오.)

+0

스크린 샷은 자동화 된 빌드 중에 찍은 것입니다. 따라서 사용자는 전혀 신경 쓸 필요가 없습니다. 그러나 PaintTo를 사용하는 아이디어는 흥미로운 것 같습니다 ... –