Holy cow, I wrote a book!
Up until Windows XP,
applications could intercept the
WM_QUERYENDSESSION message and tell
Windows, "No, don't shut down."
If they were polite about it, they would also inform the user which
application blocked system shutdown and why.
And if they were really polite about it,
they would even provide a way for the user to say,
"I don't care; shut down anyway."
As I noted some time ago,
made it harder for applications to block shutdown.
Applications are given two seconds to clean up, and then it's game over.
Okay, now the game of
walls and ladders
The power management folks created an escape hatch for applications
which are doing things like burning a CD or controlling an
where shutting down the machine may not be in the user's best interest.
(The user ends up with a coaster or a factory on fire.)
But since they created the escape hatch,
they get to control the keys to the hatch, too.
function lets you register your application window with a custom message
that is displayed to the user when they try to shut down the computer.
When the danger-time is over, you call
to say that the coast is clear and shutdown is once again permitted.
Mind you, these blocks are merely advisory.
If users really want to create a coaster or burn down their factory,
they can click Force shut down.
One nice thing about making Windows responsible for the warning message
is that if multiple applications want to block shutdown, all of them
can be displayed in a single dialog, and the user only needs to click
Force shut down once.
Further guidance on system shutdown and the use of these functions
can be found in the
Application Shutdown Changes in Windows Vista
which was the source material for most of this blog entry.