0

このウィンドウが私のアプリケーションのものではない場合でも、マウスがウィンドウの最大化ボタンを指している(ホバーしている)かどうかを判断する方法。そのためのAPIはありますか?

4

1 に答える 1

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スレッドがハングしないことを保証するために使用することを検討してください。

于 2012-02-01T20:43:48.170 に答える