Я нашел проблему. Мое приложение обрабатывало сообщение WM_GETMINMAXINFO и переопределяло значения в записи параметра MINMAXINFO. Значения, которые были в записи, были увеличены на 7 (ширина границы) разрешением экрана. Это имеет смысл в том, что, когда оно развернуто, оно раздвигает границы окна за пределы видимой части экрана. Он также устанавливает ptMaxPosition (точка, в которой источник окна устанавливается при максимизации) на -7, -7. Мое приложение устанавливало это в 0,0, а максимальная высота и ширина точно соответствовали размеру экрана (не завышены). Не уверен, почему это было сделано; это было написано предшественником. Если я закомментирую этот код и не изменю структуру MINMAXINFO, работает функция автоматического скрытия.
Что касается того, почему, я не совсем уверен. Возможно, что обнаружение появления «автоматически скрытой» панели задач подключено к механизму обработки сообщений WM_MOUSEMOVE, а не для WM_NCMOUSEMOVE. С моим приложением, заставляющим максимизировать парковку моей границы прямо в нижней части экрана, я бы генерировал события WM_NCMOUSEMOVE; если оставить MINMAXINFO в одиночку, я бы сгенерировал WM_MOUSEMOVE.