Hi friends of asm, i posted this thread before in the wrong forum, but i hope this is the right place now :)

For 2 weeks now, im trying to solve the following problem, without any effort:

Display of a window (without focus) that overlaps all others, even fullscreen directx windows used in many games.

The purpose of my program is to display important status information like B/s datarate, IsConnected etc. especially while a game is running. Right now im using CreateWindowEx to create a topmost window and check WM_ACTIVATEAPP if someone wants to change my zorder. If so, i simply alter the other windows zorder to NOTTOPMOST using SetWindowPos and tada! im ontop again =)
In general all that works just fine, but some games (GROM, Battlefield 1942) somehow achieve of still overlapping my little window, regardless of what im doing! I noticed that when i manually set my window to topmost position using a extra installed hotkey function, it shows up in those 2 games just for a milisecond and then again disappears behind those others fullscreen windows.

I've already tried to find answers in google or #win32asm, but even #asm couldnt help me.
It would be a great pleasure if someone has an idea how to solve this, thanks in advance,

See ya !
Posted on 2003-02-08 11:57:04 by LordHelmchen
That is somehow impossible, because the whole ideea of DirectDraw/DirectX is to make the game topmost window in EXCLUSIVE mode, sorry

However most video boards have a Drawto GDi Screen of something function tha can be used to render a GDI window (like FileOpen/Save dialogs on top of game even in full screen mode, sometimes it works ...sometimees is not.

You should hook the game because it is unlikely you are going to convince all game programmers to make this space for you.

Since you should do that it is more easy to just try and write to the primary buffer BEFORE game makes a FLIP/SHOW but again this is complicated as games do not use same methods to write on screen, for example in HE we sometimes use ::FLIP method and other times we writedirectly on primary buffer...

Also we can do that from the main game thread or from a sepparated render or flip thread...so it is likely you will have to deal with each game :((
Posted on 2003-03-02 15:00:24 by BogdanOntanu
Actually, you can do this by setting it as a child of the window you want it over. Best way to do that is use the SetWindowLong API.
Set a hook to the window you want to get over, then ofcourse set the other window over it.
Posted on 2003-03-06 08:06:00 by ESP
thanks alot for your interest!

the child-window method doesnt work for the games im testing this on. right now im trying a code-injection based method but i guess that'll give me ALOT flickering..

if anyone has a 100% working method hes willing to share, PLEASE respond !

:( :( :(
Posted on 2003-03-06 11:13:06 by LordHelmchen