Before calling TerminateProcess() on all processes assocatiated with
the monitored application, enumerate all windows and threads and
post appropriate messages to them. If the application bothers to
listen for such messages it has a chance to shut itself down gracefully.
If the application ignores this chance to do the right thing it's
fair game for termination.