Как определить, если мышь указывает на (наведите указатель мыши) кнопку увеличения окна, даже если это окно не относится к моему приложению. Есть ли API для этого?Как определить, если мышь указывает на максимальную кнопку окна под курсором
0
A
ответ
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
, чтобы гарантировать, что ваша нить не будет висеть.
О каком языке программирования вы говорите? – Vinit
добавленные теги, предпочтительный C# – diimdeep
[GetTitleBarInfo] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633513 (v = vs.85) .aspx) выглядит очень многообещающим. –