MsgWaitForMultipleObjects(): it will not return immediately
if an event already in the queue when it's called was already
in the queue during the last call to GetMessage()/PeekMessage().
also now discarding screen saver events if there are any other
screen saver events in the queue already. this prevents these
events from piling up in the queue, which they'd do because we
sleep for 250ms when handling each one.