Если я помню, стандартное решение состоит в том, чтобы создать простое окно без стилей с насосом сообщений, как обычно, но никогда не вызывать ShowWindow для него. Таким образом, вы можете получать и обрабатывать стандартные сообщения, такие как WM_QUERYENDSESSION, которые отправляются во все окна.