2012-02-01 6 views
0

마우스가 내 애플리케이션이 아닌 경우에도 마우스가 가리키는 (가리키면) 최대화 버튼이 있는지 결정하는 방법. API가 있습니까?마우스가 커서 아래 창 최대화 버튼을 가리키는 지 확인하는 방법

+0

무슨 프로그래밍 언어를 사용하십니까? – Vinit

+0

태그가 추가 된 경우 C#을 사용하는 것이 좋습니다. – diimdeep

+0

[GetTitleBarInfo] (http://msdn.microsoft.com/ko-kr/library/windows/desktop/ms633513(v=vs.85)asp) 매우 유망 해 보입니다. –

답변

5

WM_NCHITTEST을 해당 창으로 보낼 수 있습니다. 반환 값은 요청 된 좌표의 객체 유형에 해당합니다. 이 같은

뭔가 :

bool IsMouseOverMaxBtn(HWND hWnd) 
{ 
    POINT pt; 
    VERIFY(GetCursorPos(&pt)); // get mouse position 

    int retVal = SendMessage(hWnd, WM_NCHITTEST, 0, MAKELONG(pt.x, pt.y)); 

    return HTMAXBUTTON == retVal; 
} 

편집 :

당신은 어떤 창으로이 메시지를 보낼 수 있습니다 (반드시 스레드/프로세스에 속하지). 문자열 포인터와 같은 포인터가 포함되어 있지 않으므로 아무런 문제가 없습니다.

그러나 다른 스레드에 속하는 창으로 메시지를 보내면 (게시하지 않음) 스레드가 일시 중단되는 동안 상당히 많은 작업이 수행됩니다. 해당 창을 제공하는 응용 프로그램의 스레드가 중단되기 때문에 스레드가 중단되는 상황이 발생할 수도 있습니다.

SendMessageTimeout을 사용하면 스레드가 멈추지 않을 수도 있습니다.