A customer who doesn’t read this blog had the following question:
The requirement for our application is that it must be on top of all other windows, even in the presence of other windows with the topmost style. In our
WM_KILLFOCUS
andWM_PAINT
messages, we set ourselves to topmost, and then callSetWindowPos
to bring ourselves to the front, and then weSetForegroundWindow
ourselves just to make sure.The result is that our application and another application end up fighting back and forth because both applications are applying similar logic to remain on top. There are other applications that defeat our logic, and they manage to cover our application. (These other applications are third party applications we have no control over.)
We are in the process of writing a DLL to hook all messages for all windows and [even crazier things that aren’t worth elaborating on], but at the moment this causes the other hooked applciations to crash. We are also considering setting a timer and calling
SetWindowPos
when the timer fires, but that seems inefficient.
The customer didn’t even have to run through the thought experiment What if two programs did this?; they got to run it in real life! And the result was as predicted: The two programs fight with each other to be the one that is on top of the other. Nobody wins; everybody loses, especially the user.
0 comments