2012-02-01 4 views
0

Как определить, если мышь указывает на (наведите указатель мыши) кнопку увеличения окна, даже если это окно не относится к моему приложению. Есть ли API для этого?Как определить, если мышь указывает на максимальную кнопку окна под курсором

+0

О каком языке программирования вы говорите? – Vinit

+0

добавленные теги, предпочтительный C# – diimdeep

+0

[GetTitleBarInfo] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633513 (v = vs.85) .aspx) выглядит очень многообещающим. –

ответ

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; 
} 

Edit:

Вы можете отправить сообщение любому окну (не обязательно принадлежат к вашей нити/процесса). Поскольку никакие указатели не задействованы (например, указатели на строки) - проблем нет.

Однако вы должны заметить, что отправка (не проводка) сообщения в окно, принадлежащее другому потоку, является довольно тяжелой операцией, в течение которой ваш поток приостановлен. Там может даже произойти ситуация, когда ваш поток зависает, потому что поток приложения, обслуживающего это окно, зависает.

Вы можете использовать SendMessageTimeout, чтобы гарантировать, что ваша нить не будет висеть.

 Смежные вопросы

  • Нет связанных вопросов^_^