エラーが起きたときに同期ダイアログが最前面に出てきてしまうというのを何とかするために色々調べてみました。SetForegroundWindowするとインプットキューの状態によっては最前面にまわってしまうので、FlashWindowするようにし、さらにShowWindowもSW_SHOWではなくてSW_SHOWNAを指定するようにし、その後にSetWindowPosで一番下にまわすようにしてみました。でもまだタイミングによっては最前面に回ってしまうことがあるようです。
同期ダイアログはメインスレッドとは別のスレッドでメッセージループも別なので*1、そのあたりが怪しいのですがいまいちどこがどう影響しているのかつかめないところがあります。
*1 同期オブジェクトでの排他制御とWindowメッセージの同期でデッドロックするのを避けるため