가능한 한 정확하게 Windows OS에서 시스템 커서를 비트 맵으로 캡처하고 싶습니다. 제공된 API는 내 지식 GetCursorInfo, DrawIconEx입니다.애니메이션 시스템 커서의 어느 단계가 Windows에 표시되고 있는지 파악하십시오.
행동의 간단한 체인은 다음과 같습니다
- 이 DrawIconEx를 사용하여 메모리 DC에있는 커서를 페인트
- GetCursorInfo 를 사용하여 커서를 가져옵니다.
다음은 코드의 대략적인 모습입니다.
CURSORINFO CursorInfo;
(VOID)memset(&CursorInfo, 0, sizeof(CursorInfo));
CursorInfo.cbSize = sizeof(CursorInfo);
if (GetCursorInfo(&CursorInfo) &&
CursorInfo.hCursor)
{
// ... create here the memory DC, memory bitmap
boError |= !DrawIconEx(hCursorDC, // device context
0, // xLeft
0, // yTop
CursorInfo.hCursor, // cursor handle
0, // width, use system default
0, // height, use system default
0, // step of animated cursor !!!!!!!!!
NULL, // flicker free brush, don't use it now
DI_MASK | DI_DEFAULTSIZE); // flags
// ... do whatever we want with the cursor in our memory DC
}
지금, 아무도 내가 (나는 ... 다음 DrawIconEx의 istepIfAniCur 매개 변수에 전달 될 수있는 가치를 필요로) 그려되고있는 애니메이션 커서의 단계를 얻을 수있는 방법을 알고? 현재 위의 코드는 항상 애니메이션 커서의 첫 번째 단계 만 렌더링합니다.
나는 이것이 쉽게 끝나지 않는다고 생각하지만, 어쨌든 물어볼 가치가있다.
안녕하세요 David, 나는 그 값을 DrawIconEx에 전달할 수 있도록 애니메이션 커서의 어느 단계가 그려지는지 알아야합니다. DC 작성에 대한 설명은 DC 작성, 비트 맵 작성, 비트 맵 선택에 대한 모든 코드를 대체합니다. 그것은 문제가 아닙니다. –
흠. 거의 다른 질문입니다. 필자는 시스템 후크 기능 중 일부를 살펴볼 것입니다. 하지만 거기에 있을지는 의문입니다. –
어떻게 든 현재 프레임을 알아내는 데 성공하면 DrawIconEx는 디스크에 파일로 존재하지 않는 애니메이션 커서에서 작동하지 않는다는 사실에 실망하게됩니다. 이 제한 사항은 일반적으로 다른 응용 프로그램의 커서에 액세스하는 데까지 확장됩니다. Wine 프로젝트에서이 작업을 위해 많은 시간을 보냈는데 GetCursorFrameInfo()를 사용하여 다양한 유형의 애니메이션 커서에서 프레임을 제대로 가져와야한다는 사실을 발견했습니다. – Compholio