diff --git a/Release/.gitattributes b/Release/.gitattributes deleted file mode 100644 index b110a24..0000000 --- a/Release/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.{dll,exe} filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/Release/dxwnd.dll b/Release/dxwnd.dll deleted file mode 100644 index 13f54df..0000000 --- a/Release/dxwnd.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:941f77bf133938a99ebdcbea0c35f2f33248ac7c1d4e7d5fe9d799ce470b433d -size 782336 diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 13f54df..52954a9 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:941f77bf133938a99ebdcbea0c35f2f33248ac7c1d4e7d5fe9d799ce470b433d -size 782336 +oid sha256:5fc4cf8ef5a8514260d213b7d89caebe950a9dcfc43e948b25bb835c57e2df28 +size 782848 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 885de33..96e20d7 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:743ed4e87aa9d02d8b85936799f99eb83bab948207f13d1a98497644ddd27b20 +oid sha256:0478367b7c87124f807b20c7a3f5e3c6337815e9f8d63619ae023702f0efd817 size 673792 diff --git a/build/exports/Dominant Species.dxw b/build/exports/Dominant Species.dxw new file mode 100644 index 0000000..2170f96 --- /dev/null +++ b/build/exports/Dominant Species.dxw @@ -0,0 +1,36 @@ +[target] +title0=Dominant Species +path0=F:\Games\Dominant Species\DominantSpecies.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=4194304 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/Hexen II (GDI).dxw b/build/exports/Hexen II (GDI).dxw new file mode 100644 index 0000000..73e7fad --- /dev/null +++ b/build/exports/Hexen II (GDI).dxw @@ -0,0 +1,36 @@ +[target] +title0=Hexen II (GDI) +path0=D:\Games\Hexen II - RIP\h2.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185827 +flagg0=1209401344 +flagh0=65556 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/Hexen II (OpenGl).dxw b/build/exports/Hexen II (OpenGl).dxw new file mode 100644 index 0000000..c7bc23b --- /dev/null +++ b/build/exports/Hexen II (OpenGl).dxw @@ -0,0 +1,36 @@ +[target] +title0=Hexen II (OpenGl) +path0=D:\Games\Hexen II - RIP\glh2.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185827 +flagg0=1209401344 +flagh0=65556 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/Interstate 76 Nitro Pack.dxw b/build/exports/Interstate 76 Nitro Pack.dxw new file mode 100644 index 0000000..5042951 --- /dev/null +++ b/build/exports/Interstate 76 Nitro Pack.dxw @@ -0,0 +1,36 @@ +[target] +title0=Interstate 76 Nitro Pack +path0=F:\Games\Interstate 76 Nitro Pack\nitro.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=0 +coord0=0 +flag0=134217762 +flagg0=2013265920 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 +slowratio0=1 +scanline0=1 +initresw0=0 +initresh0=0 diff --git a/build/exports/Man TT Super Bike (fake fullscreen).dxw b/build/exports/Man TT Super Bike (fake fullscreen).dxw new file mode 100644 index 0000000..f35dbde --- /dev/null +++ b/build/exports/Man TT Super Bike (fake fullscreen).dxw @@ -0,0 +1,36 @@ +[target] +title0=Man TT Super Bike +path0=D:\Games\ManTT\MANXTT.EXE +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=2 +flag0=673185827 +flagg0=1241514008 +flagh0=65556 +flagi0=138444804 +flagj0=1073747072 +flagk0=327680 +flagl0=25165824 +flagm0=1024 +tflag0=0 +dflag0=0 +posx0=150 +posy0=150 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=640 +initresh0=480 diff --git a/build/exports/Man TT Super Bike.dxw b/build/exports/Man TT Super Bike.dxw index 596f73c..c753d49 100644 --- a/build/exports/Man TT Super Bike.dxw +++ b/build/exports/Man TT Super Bike.dxw @@ -1,6 +1,6 @@ [target] title0=Man TT Super Bike -path0=F:\Games\ManTTSuperBike\MANXTT.EXE +path0=D:\Games\ManTT\MANXTT.EXE startfolder0= launchpath0= module0= @@ -10,14 +10,14 @@ registry0= ver0=0 monitorid0=-1 coord0=0 -flag0=673194022 -flagg0=1207959552 -flagh0=327700 +flag0=673185827 +flagg0=1241513984 +flagh0=65556 flagi0=138412036 flagj0=4224 -flagk0=17104896 -flagl0=276824576 -flagm0=0 +flagk0=327680 +flagl0=0 +flagm0=1024 tflag0=0 dflag0=0 posx0=50 diff --git a/build/exports/Martian Gothic Unification.dxw b/build/exports/Martian Gothic Unification.dxw index 651a152..219b73e 100644 --- a/build/exports/Martian Gothic Unification.dxw +++ b/build/exports/Martian Gothic Unification.dxw @@ -6,7 +6,7 @@ opengllib0= ver0=0 coord0=0 flag0=134217762 -flagg0=1207959552 +flagg0=1275068416 flagh0=20 flagi0=4194308 tflag0=0 @@ -26,7 +26,7 @@ launchpath0= notes0= registry0= flagj0=0 -flagk0=65536 +flagk0=98304 flagl0=0 flagm0=0 dflag0=0 @@ -34,3 +34,9 @@ winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 +startfolder0= +monitorid0=0 +slowratio0=1 +scanline0=1 +initresw0=0 +initresh0=0 diff --git a/build/exports/NASCAR 2000.dxw b/build/exports/NASCAR 2000.dxw new file mode 100644 index 0000000..b9d9198 --- /dev/null +++ b/build/exports/NASCAR 2000.dxw @@ -0,0 +1,36 @@ +[target] +title0=NASCAR 2000 +path0=F:\Games\Nascar 2000\NASCAR 2000.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673202210 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/ShipWreckers demo.dxw b/build/exports/ShipWreckers demo.dxw new file mode 100644 index 0000000..4fa2523 --- /dev/null +++ b/build/exports/ShipWreckers demo.dxw @@ -0,0 +1,36 @@ +[target] +title0=ShipWreckers demo +path0=F:\Games\ShipWreckers demo\SW.EXE +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=1048576 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/SuperBike 2000.dxw b/build/exports/SuperBike 2000.dxw new file mode 100644 index 0000000..53a7064 --- /dev/null +++ b/build/exports/SuperBike 2000.dxw @@ -0,0 +1,36 @@ +[target] +title0=SuperBike 2000 +path0=F:\Games\SBK2000\SBK2000.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0=N.b.\nCD rom in\nHKEY_LOCAL_MACHINE/SOFTWARE/EA SPORTS/Superbike 2000/CD\nor \nHKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/EA SPORTS/Superbike 2000/CD +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673202210 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=524288 +flagm0=1312 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/V-Rally 3.dxw b/build/exports/V-Rally 3.dxw new file mode 100644 index 0000000..cbeb0e7 --- /dev/null +++ b/build/exports/V-Rally 3.dxw @@ -0,0 +1,36 @@ +[target] +title0=V-Rally 3 +path0=F:\Games\V-Rally 3\Vrally3.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=65556 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/Warcraft Adventures - Lord Of The Clans.dxw b/build/exports/Warcraft Adventures - Lord Of The Clans.dxw new file mode 100644 index 0000000..afd3c47 --- /dev/null +++ b/build/exports/Warcraft Adventures - Lord Of The Clans.dxw @@ -0,0 +1,36 @@ +[target] +title0=Warcraft Adventures - Lord Of The Clans +path0=F:\Games\Warcraft Adventures - Lord Of The Clans\PlayWin.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/Warhammer - Shadow of the Horned Rat.dxw b/build/exports/Warhammer - Shadow of the Horned Rat.dxw index 4e1fc47..8fe3f72 100644 --- a/build/exports/Warhammer - Shadow of the Horned Rat.dxw +++ b/build/exports/Warhammer - Shadow of the Horned Rat.dxw @@ -1,6 +1,6 @@ [target] title0=Warhammer - Shadow of the Horned Rat -path0=D:\Games\Warhammer - Shadow of the Horned Rat\WHSHR.EXE +path0=F:\Games\Warhammer - Shadow of the Horned Rat\WHSHR.EXE startfolder0= launchpath0= module0=GAMEF.DLL diff --git a/build/exports/Wrestling MPire Remix.dxw b/build/exports/Wrestling MPire Remix.dxw new file mode 100644 index 0000000..d055926 --- /dev/null +++ b/build/exports/Wrestling MPire Remix.dxw @@ -0,0 +1,36 @@ +[target] +title0=Wrestling MPire Remix +path0=F:\Games\Wrestling MPire Remix (Career)\Wrestling MPire Remix (Fullscreen).exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=65556 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=268435456 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/dxwnd.ini b/build/exports/dxwnd.ini index f08cfa6..bec78ce 100644 --- a/build/exports/dxwnd.ini +++ b/build/exports/dxwnd.ini @@ -1,5 +1,41 @@ [window] -posx=1235 -posy=551 +posx=1165 +posy=618 sizx=320 sizy=200 +[target] +title0=administrator +path0=administrator +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/dxwnd.log b/build/exports/dxwnd.log index b9701b9..0f66b21 100644 --- a/build/exports/dxwnd.log +++ b/build/exports/dxwnd.log @@ -1,228 +1,2 @@ -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=7 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=7 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe.noshim" dir="F:\RhemE\RhemE" -Target handle=67c -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe.noshim" dir="F:\RhemE\RhemE" -Target handle=908 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -debugger mode -create process: path="F:\RhemE\RhemE" -create process: base=0x20000000 path="F:\RhemE\RhemE\RHEM1(scalable).exe" -create thread: th=0xA18 base=0x2F1000 start=0x76C68500 -load dll: base=0x77BD0000 path="C:\Windows\SysWOW64\ntdll.dll" -unload dll: base=0x540000 -load dll: base=0x76C40000 path="C:\Windows\SysWOW64\kernel32.dll" -unload dll: base=0x76C40000 -unload dll: base=0x540000 -unload dll: base=0x6A0000 -load dll: base=0x76C40000 path="C:\Windows\SysWOW64\kernel32.dll" -load dll: base=0x74830000 path="C:\Windows\SysWOW64\KernelBase.dll" -load dll: base=0x6E490000 path="C:\Windows\SysWOW64\apphelp.dll" -load dll: base=0x78E50000 path="C:\Windows\AppPatch\AcLayers.dll" -load dll: base=0x773E0000 path="C:\Windows\SysWOW64\msvcrt.dll" -load dll: base=0x74C00000 path="C:\Windows\SysWOW64\user32.dll" -load dll: base=0x774A0000 path="C:\Windows\SysWOW64\win32u.dll" -load dll: base=0x75600000 path="C:\Windows\SysWOW64\gdi32.dll" -load dll: base=0x75450000 path="C:\Windows\SysWOW64\gdi32full.dll" -load dll: base=0x75850000 path="C:\Windows\SysWOW64\shell32.dll" -load dll: base=0x75800000 path="C:\Windows\SysWOW64\cfgmgr32.dll" -load dll: base=0x76DD0000 path="C:\Windows\SysWOW64\windows.storage.dll" -load dll: base=0x749E0000 path="C:\Windows\SysWOW64\combase.dll" -load dll: base=0x75630000 path="C:\Windows\SysWOW64\ucrtbase.dll" -load dll: base=0x75300000 path="C:\Windows\SysWOW64\rpcrt4.dll" -load dll: base=0x74690000 path="C:\Windows\SysWOW64\sspicli.dll" -load dll: base=0x74680000 path="C:\Windows\SysWOW64\cryptbase.dll" -load dll: base=0x76D70000 path="C:\Windows\SysWOW64\bcryptprimitives.dll" -load dll: base=0x77980000 path="C:\Windows\SysWOW64\sechost.dll" -load dll: base=0x777F0000 path="C:\Windows\SysWOW64\powrprof.dll" -load dll: base=0x779D0000 path="C:\Windows\SysWOW64\advapi32.dll" -load dll: base=0x76D20000 path="C:\Windows\SysWOW64\shlwapi.dll" -load dll: base=0x77BC0000 path="C:\Windows\SysWOW64\kernel.appcore.dll" -load dll: base=0x776F0000 path="C:\Windows\SysWOW64\SHCore.dll" -load dll: base=0x773A0000 path="C:\Windows\SysWOW64\profapi.dll" -load dll: base=0x77650000 path="C:\Windows\SysWOW64\oleaut32.dll" -load dll: base=0x74D60000 path="C:\Windows\SysWOW64\msvcp_win.dll" -load dll: base=0x74E40000 path="C:\Windows\SysWOW64\setupapi.dll" -load dll: base=0x74000000 path="C:\Windows\SysWOW64\mpr.dll" -load dll: base=0x66680000 path="C:\Windows\SysWOW64\sfc.dll" -load dll: base=0x73930000 path="C:\Windows\SysWOW64\winspool.drv" -load dll: base=0x72FA0000 path="C:\Windows\SysWOW64\bcrypt.dll" -load dll: base=0x640C0000 path="C:\Windows\SysWOW64\sfc_os.dll" -output debug: len=115 unicode=0 -output debug: len=115 unicode=0 -load dll: base=0x67100000 path="C:\Windows\SysWOW64\SortServer2003Compat.dll" -load dll: base=0x773B0000 path="C:\Windows\SysWOW64\imm32.dll" -exception: code=0x80000003(Breakpoint) addr=0x77C7748C first=1 -exit thread: exitcode=0x0 -load dll: base=0x10000000 path="C:\Users\user\AppData\Local\Temp\TempFolder.aad\proj.dll" -create thread: th=0x414 base=0x2F4000 start=0x77C067C0 -create thread: th=0x670 base=0x2F7000 start=0x77C067C0 -load dll: base=0x69000000 path="C:\Users\user\AppData\Local\Temp\TempFolder.aad\iml32.dll" -load dll: base=0x774C0000 path="C:\Windows\SysWOW64\comdlg32.dll" -create thread: th=0x670 base=0x2FA000 start=0x77C067C0 -load dll: base=0x72DE0000 path="C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.14393.447_none_5507ded2cb4f7f4c\comctl32.dll" -load dll: base=0x75710000 path="C:\Windows\SysWOW64\ole32.dll" -load dll: base=0x68000000 path="C:\Users\user\AppData\Local\Temp\TempFolder.aad\dirapi.dll" -load dll: base=0x73050000 path="C:\Windows\SysWOW64\winmm.dll" -load dll: base=0x740F0000 path="C:\Windows\SysWOW64\version.dll" -load dll: base=0x72F70000 path="C:\Windows\SysWOW64\winmmbase.dll" -load dll: base=0x720000 path="C:\Windows\SysWOW64\winmmbase.dll" -load dll: base=0x2180000 path="C:\Windows\SysWOW64\winmmbase.dll" -unload dll: base=0x72F70000 -unload dll: base=0x720000 -load dll: base=0x6C670000 path="C:\Windows\SysWOW64\uxtheme.dll" -create thread: th=0x414 base=0x2FD000 start=0x78E7C3C0 -load dll: base=0x77840000 path="C:\Windows\SysWOW64\msctf.dll" -load dll: base=0x92E0000 path="D:\DxWnd.develop\v2_04_07_beta\Release\dxwnd.dll" -create thread: th=0xC88 base=0x300000 start=0x73953B70 -load dll: base=0x64080000 path="C:\Windows\SysWOW64\msvfw32.dll" -load dll: base=0x755B0000 path="C:\Windows\SysWOW64\wintrust.dll" -load dll: base=0x9400000 path="C:\Windows\SysWOW64\msasn1.dll" -load dll: base=0x746B0000 path="C:\Windows\SysWOW64\crypt32.dll" -load dll: base=0x64590000 path="C:\Windows\SysWOW64\avifil32.dll" -load dll: base=0x72FD0000 path="C:\Windows\SysWOW64\msacm32.dll" -exit thread: exitcode=0x1 -exit thread: exitcode=0x1 -exit thread: exitcode=0x1 -exit thread: exitcode=0x1 -exit thread: exitcode=0x1 -exit process -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=888 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=828 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=a04 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=6bc -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=878 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=86c -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM.noshim.exe" dir="F:\RhemE\RhemE" -Target handle=8a0 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM.noshim.exe" dir="F:\RhemE\RhemE" -Target handle=cb0 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -self elevation -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -self elevation +OnRun idx=28 prog="D:\Games\ManTT\MANXTT.EXE" unhooked=0 setwindowshook mode diff --git a/build/exports/dxwnd.reg b/build/exports/dxwnd.reg index d871b30..ee2d7f7 100644 --- a/build/exports/dxwnd.reg +++ b/build/exports/dxwnd.reg @@ -1,11 +1,11 @@ + [HKEY_LOCAL_MACHINE\SOFTWARE] [HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape] [HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB] -;"Options"="1,1,1,1,1,2,1,1" // digital audio on -"Options"="1,1,1,1,1,2,0,0" // digital audio off -;"Options"="0,0,0,0,0,0,0,0" //all off +;"Options"="3,1,1,2,1,1,0,0" // High Quality, digital audio off +"Options"="3,1,1,2,1,1,1,1" // High Quality, digital audio on [HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\InstallDir] @="\{path}" diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index e637f59..4b9799f 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1486,3 +1486,11 @@ fix: ddraw surface capability regression for emulated backbuffer: fixes "Dominan fix: ddraw surface capability regression for direct primary/backbuffer: should fix "Tomb raider 3" in HW mode fix: ddraw surface capability regression for zbuffer: fixes "Toca Touring Car" in SW mode fix: in fx1, bug crashing app when querying unknown interfaces! + +v2.04.09 +add: hook USER32 AdjustWindowRect/Ex calls: fix window position problems for "Man TT Superbike" +add: hook for USER32 GetActiveWindow() tracing. +fix: version hooking for IDIrectDraw methods called by IDIrectDrawSurface methods: fixes many crashes on ddraw games +fix: capability registration passed in IDIrectDrawSurface::QueryInterface() calls: fixes settings for ZBUFFER surfaces +fix: capsdb logging (developer's use only) +fix: handling of WM_NCCALCSIZE & WM_NCPAINT messages in winproc hooker to align behaviour to comment. To be tested ... diff --git a/dll/ddcreates.cpp b/dll/ddcreates.cpp index 3a17964..89d7fe0 100644 --- a/dll/ddcreates.cpp +++ b/dll/ddcreates.cpp @@ -352,14 +352,7 @@ static HRESULT BuildPrimaryFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCre if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){ LPDIRECTDRAWSURFACE lpPrim; GetGDISurface_Type pGetGDISurface; - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; break; - case 2: pGetGDISurface = pGetGDISurface2; break; - case 3: pGetGDISurface = pGetGDISurface3; break; - case 4: pGetGDISurface = pGetGDISurface4; break; - case 7: pGetGDISurface = pGetGDISurface7; break; - } + pGetGDISurface = pGetGDISurfaceMethod(dxversion); OutTraceE("BuildPrimaryFullscreen: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n"); (*pGetGDISurface)(lpPrimaryDD, &lpPrim); while ((*pReleaseSMethod(dxversion))(lpPrim)); @@ -411,14 +404,7 @@ static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){ LPDIRECTDRAWSURFACE lpPrim; GetGDISurface_Type pGetGDISurface; - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; break; - case 2: pGetGDISurface = pGetGDISurface2; break; - case 3: pGetGDISurface = pGetGDISurface3; break; - case 4: pGetGDISurface = pGetGDISurface4; break; - case 7: pGetGDISurface = pGetGDISurface7; break; - } + pGetGDISurface = pGetGDISurfaceMethod(dxversion); OutTraceE("BuildPrimaryDir: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n"); (*pGetGDISurface)(lpPrimaryDD, &lpPrim); while ((*pReleaseSMethod(dxversion))(lpPrim)); @@ -668,14 +654,7 @@ static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS LPDIRECTDRAWSURFACE lpPrim; DDSURFACEDESC2 prim; GetGDISurface_Type pGetGDISurface; - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; break; - case 2: pGetGDISurface = pGetGDISurface2; break; - case 3: pGetGDISurface = pGetGDISurface3; break; - case 4: pGetGDISurface = pGetGDISurface4; break; - case 7: pGetGDISurface = pGetGDISurface7; break; - } + pGetGDISurface = pGetGDISurfaceMethod(dxversion); (*pGetGDISurface)(lpPrimaryDD, &lpPrim); memset(&prim, 0, sizeof(DDSURFACEDESC2)); prim.dwSize = (dxversion >= 4) ? sizeof(DDSURFACEDESC2) : sizeof(DDSURFACEDESC); @@ -1007,13 +986,20 @@ HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface if(res) return res; lpDDSPrim = *lplpdds; dxwss.PushPrimarySurface(lpDDSPrim, dxversion); + dxwcdb.PushCaps(*lplpdds, lpddsd->ddsCaps.dwCaps); RegisterPixelFormat(dxversion, lpDDSPrim); if (BBCount){ + DWORD dwCaps; // build emulated backbuffer surface res=AttachBackBuffer(lpdd, pCreateSurface, lpddsd, dxversion, &lpDDSBack, NULL); if(res) return res; dxwss.PushBackBufferSurface(lpDDSBack, dxversion); + // here we try to guess what sort of capabilities would expose a built-in backbuffer surface + dwCaps = lpddsd->ddsCaps.dwCaps; + dwCaps &= ~DDSCAPS_PRIMARYSURFACE; + dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY); + dxwcdb.PushCaps(lpDDSBack, dwCaps); } if(IsTraceDDRAW){ diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 1d4f4f3..9013b2f 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -956,6 +956,20 @@ SetClipper_Type pSetClipperMethod(int dxversion) return pSetClipper; } +Blt_Type pGetBltMethod(int dxversion) +{ + Blt_Type pBlt; + switch(dxversion){ + case 1: pBlt=pBlt1; break; + case 2: pBlt=pBlt2; break; + case 3: pBlt=pBlt3; break; + case 4: pBlt=pBlt4; break; + case 7: pBlt=pBlt7; break; + } + CHECKPTR(pBlt, "Blt"); + return pBlt; +} + Blt_Type pBltMethod() { Blt_Type pBlt; @@ -2307,7 +2321,7 @@ void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion) if((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)) { // z-buffer surface - set to memory lpddsd->ddsCaps.dwCaps = DDSCAPS_ZBUFFER; - if(dxw.dwFlags8 & ALLOWSYSMEMON3DDEV) lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER; + if (dxw.dwFlags8 & ALLOWSYSMEMON3DDEV) lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER; return; } @@ -2456,6 +2470,29 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet } else { OutTraceDDRAW("GetAttachedSurface(%d): attached=%x\n", dxversion, *lplpddas); + + if(lpddsc->dwCaps & DDSCAPS_ZBUFFER){ + char *sMode; + // Martian Gothic and others: if the ZBUFFER is unknown, then you must register virtual capabilities + // compatible with those of the original surface! + DWORD dwCaps; + lpDDZBuffer = *lplpddas; + dwCaps = dxwcdb.GetCaps(*lplpddas); + if(!dwCaps){ + dwCaps = dxwcdb.GetCaps(lpdds); + if(dwCaps){ + dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_BACKBUFFER|DDSCAPS_3DDEVICE|DDSCAPS_COMPLEX); + dwCaps |= DDSCAPS_ZBUFFER; + //if(dwCaps & DDSCAPS_VIDEOMEMORY) dwCaps|=DDSCAPS_LOCALVIDMEM; + dxwcdb.PushCaps(*lplpddas, dwCaps); + sMode = "derived"; + } + else sMode = "unknown"; + } + else sMode = "known"; + OutTraceDW("GetAttachedSurface(%d): ZBUFFER caps=%x(%s) (%s)\n", dxversion, dwCaps, ExplainDDSCaps(dwCaps), sMode); + } + } return res; @@ -2860,13 +2897,7 @@ HRESULT WINAPI ColorConversionEmulated(int dxversion, LPDIRECTDRAWSURFACE lpdds, HRESULT res; Blt_Type pBlt; RECT srcrect, destrect; - switch(dxversion){ - case 1: pBlt=pBlt1; break; - case 2: pBlt=pBlt2; break; - case 3: pBlt=pBlt3; break; - case 4: pBlt=pBlt4; break; - case 7: pBlt=pBlt7; break; - } + pBlt = pGetBltMethod(dxversion); // v2.04.01.fx6: copy emurect since pEmuBlt will alter values! srcrect=destrect=emurect; res=(*pEmuBlt)(dxversion, pBlt, lpDDSEmu_Back, &destrect, lpdds, &srcrect, DDBLT_WAIT, 0); @@ -2944,13 +2975,7 @@ HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds lpdds, IsPrim?"(PRIM)":"", lpddssrc, dwflags, ExplainFlipFlags(dwflags)); Blt_Type pBlt; - switch (dxversion){ - case 1: pBlt = pBlt1; break; - case 2: pBlt = pBlt2; break; - case 3: pBlt = pBlt3; break; - case 4: pBlt = pBlt4; break; - case 7: pBlt = pBlt7; break; - } + pBlt = pGetBltMethod(dxversion); if (!IsPrim){ if(lpddssrc){ @@ -3028,7 +3053,8 @@ HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds ddsd.dwHeight = dxw.GetScreenHeight(); ddsd.dwWidth = dxw.GetScreenWidth(); } - res2=(*pCreateSurfaceMethod(dxversion))(lpPrimaryDD, &ddsd, &lpddsTmp, NULL); + // v2.04.09 fix: dxversion replaced with iBakBufferVersion - fixes "Gruntz" crash + res2=(*pCreateSurfaceMethod(iBakBufferVersion))(lpPrimaryDD, &ddsd, &lpddsTmp, NULL); if(res2) { OutTraceE("CreateSurface: ERROR %x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__); OutTraceE("Size=%d lpPrimaryDD=%x lpDDSBack=%x %s\n", @@ -3589,13 +3615,9 @@ static HRESULT WINAPI extLockDir(int dxversion, Lock_Type pLock, LPDIRECTDRAWSUR PushLockedRect(lpdds, lprect); - switch(dxversion){ - case 1: pBlt=pBlt1; pGetGDISurface=pGetGDISurface1; break; - case 2: pBlt=pBlt2; pGetGDISurface=pGetGDISurface2; break; - case 3: pBlt=pBlt3; pGetGDISurface=pGetGDISurface3; break; - case 4: pBlt=pBlt4; pGetGDISurface=pGetGDISurface4; break; - case 7: pBlt=pBlt7; pGetGDISurface=pGetGDISurface7; break; - } + // v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ... + pBlt = pGetBltMethod(dxversion); + pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion); // V2.02.43: Empire Earth does some test Lock operations apparently before the primary surface is created if(lpPrimaryDD){ @@ -3718,13 +3740,7 @@ static HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRA OutTrace("Unlock(%d): lpdds=%x%s %s\n", dxversion, lpdds, (IsPrim ? "(PRIM)": (IsBack ? "(BACK)" : "")), sRect); } - switch(dxversion){ - case 1: pBlt=pBlt1; break; - case 2: pBlt=pBlt2; break; - case 3: pBlt=pBlt3; break; - case 4: pBlt=pBlt4; break; - case 7: pBlt=pBlt7; break; - } + pBlt = pGetBltMethod(dxversion); switch(dxversion){ case 4: @@ -3861,14 +3877,9 @@ static HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECT OutTrace("Unlock(%d): lpdds=%x%s %s\n", dxversion, lpdds, (IsPrim ? "(PRIM)": (IsBack ? "(BACK)" : "")), sRect); } - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; pBlt = pBlt1; break; - case 2: pGetGDISurface = pGetGDISurface2; pBlt = pBlt2; break; - case 3: pGetGDISurface = pGetGDISurface3; pBlt = pBlt3; break; - case 4: pGetGDISurface = pGetGDISurface4; pBlt = pBlt4; break; - case 7: pGetGDISurface = pGetGDISurface7; pBlt = pBlt7; break; - } + // v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ... + pBlt = pGetBltMethod(dxversion); + pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion); if(dxw.dwFlags1 & LOCKEDSURFACE){ (*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim); @@ -3986,14 +3997,9 @@ HRESULT WINAPI extReleaseDC(int dxversion, ReleaseDC_Type pReleaseDC, LPDIRECTDR if((IsPrim) && (dxw.dwFlags1 & EMULATESURFACE)) {\ Blt_Type pBlt; GetGDISurface_Type pGetGDISurface; - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; pBlt = pBlt1; break; - case 2: pGetGDISurface = pGetGDISurface2; pBlt = pBlt2; break; - case 3: pGetGDISurface = pGetGDISurface3; pBlt = pBlt3; break; - case 4: pGetGDISurface = pGetGDISurface4; pBlt = pBlt4; break; - case 7: pGetGDISurface = pGetGDISurface7; pBlt = pBlt7; break; - } + // v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ... + pBlt = pGetBltMethod(dxversion); + pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion); sBlt(dxversion, pBlt, "ReleaseDC", lpdds, NULL, lpdds, NULL, 0, NULL, FALSE); } if (res) OutTraceE("ReleaseDC: ERROR res=%x(%s)\n", res, ExplainDDError(res)); diff --git a/dll/dxmapping.cpp b/dll/dxmapping.cpp index 815edec..b1ebaa0 100644 --- a/dll/dxmapping.cpp +++ b/dll/dxmapping.cpp @@ -421,6 +421,7 @@ void dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWP break; case DXW_SET_COORDINATES: default: + // set size if(bAutoScale){ MaxX = GetScreenWidth(); MaxY = GetScreenHeight(); @@ -443,6 +444,11 @@ void dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWP MaxY = height; if(dxw.dwFlags4 & BILINEAR2XFILTER) MaxY <<= 1; // double } + // set pos + if(dxw.dwFlags7 & ANCHORED){ + iPosX = iPos0X; + iPosY = iPos0Y; + } rect.left = iPosX; rect.top = iPosY; //v2.02.09 rect.right = iPosX + MaxX; @@ -459,7 +465,7 @@ void dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWP dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); // BEWARE: from MSDN - If the window is a child window, the return value is undefined. hMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd); - AdjustWindowRectEx(&rect, dwStyle, (hMenu!=NULL), dwExStyle); + (*pAdjustWindowRectEx)(&rect, dwStyle, (hMenu!=NULL), dwExStyle); // if (hMenu) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){}; switch(dxw.Coordinates){ case DXW_DESKTOP_WORKAREA: diff --git a/dll/dxwcapsdb.cpp b/dll/dxwcapsdb.cpp index 1c01513..7c57754 100644 --- a/dll/dxwcapsdb.cpp +++ b/dll/dxwcapsdb.cpp @@ -8,8 +8,12 @@ #include "dxwnd.h" #include "dxwcore.hpp" -//#define DXW_SURFACE_STACK_TRACING -//#define OutTraceSDB OutTrace +#if 0 +// uncomment (#if 1) to activate caps db tracing +#define DXW_SURFACE_STACK_TRACING +#define OutTraceSDB OutTrace +#include "dxhelper.h" +#endif dxwCapsDB::dxwCapsDB() { @@ -25,7 +29,7 @@ void dxwCapsDB::PushCaps(LPDIRECTDRAWSURFACE ps, DWORD dwCaps) int i; CapsDB_Type *e; #ifdef DXW_SURFACE_STACK_TRACING - OutTraceSDB(">>> CAPSDB MARK: lpdds=%x%s caps=%x(%s)\n", ps, dwCaps, ExplainDDCaps(dwCaps)); + OutTraceSDB(">>> CAPSDB MARK: lpdds=%x caps=%x(%s)\n", ps, dwCaps, ExplainDDSCaps(dwCaps)); #endif for (i=0;i>> CAPSDB GETCAPS: i=%d lpdds=%x caps=%x(%s)\n", - i, ps, CapsDB[i].dwCaps, ExplainDDCaps(CapsDB[i].dwCaps)); + i, ps, CapsDB[i].dwCaps, ExplainDDSCaps(CapsDB[i].dwCaps)); #endif return CapsDB[i].dwCaps; } diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index d57a22a..fb4c6c0 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -131,8 +131,8 @@ void dxwCore::InitTarget(TARGETMAP *target) } iSiz0X = iSizX = target->sizx; iSiz0Y = iSizY = target->sizy; - iPosX = target->posx; - iPosY = target->posy; + iPos0X = iPosX = target->posx; + iPos0Y = iPosY = target->posy; iMaxW = target->resw; iMaxH = target->resh; // Aspect Ratio from window size, or traditional 4:3 by default @@ -1161,6 +1161,7 @@ DWORD dxwCore::FixWinExStyle(DWORD dwExStyle) dwExStyle = 0; break; } + return dwExStyle; } diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index 113d4f3..95e7f4b 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -187,6 +187,8 @@ public: // simple data variables long iPosY; long iSizX; long iSizY; + long iPos0X; + long iPos0Y; long iSiz0X; long iSiz0Y; long iMaxW; diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index b3bc16c..932100f 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.04.08.fx1" +#define VERSION "2.04.09.fx1" #define DDTHREADLOCK 1 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 19c5e03..fee1db8 100644 Binary files a/dll/dxwnd.vs2008.suo and b/dll/dxwnd.vs2008.suo differ diff --git a/dll/queryint.cpp b/dll/queryint.cpp index 541b2ab..67d666d 100644 --- a/dll/queryint.cpp +++ b/dll/queryint.cpp @@ -41,6 +41,7 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte BOOL IsBack; int iObjectType; int iObjectVersion; + DWORD dwCaps; extern LPDIRECTDRAWSURFACE lpDDSEmu_Prim; IsPrim=dxwss.IsAPrimarySurface((LPDIRECTDRAWSURFACE)lpdds); @@ -177,10 +178,9 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte } // added trace - OutTraceDW("QueryInterface: lpdds=%x%s REFIID=%x obp=%x obj=%s version=%d ret=0\n", - lpdds, IsPrim?"(PRIM)":"", riid.Data1, *obp, sLabel, iObjectVersion); + OutTraceDW("QueryInterface: lpdds=%x REFIID=%x obp=%x obj=%s version=%d ret=0\n", + lpdds, riid.Data1, *obp, sLabel, iObjectVersion); -// --------- here ..... switch(iObjectType){ // simulate unavailable interfaces (useful?) case TYPE_OBJECT_DIRECTDRAW: @@ -195,15 +195,18 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte } else{ if(IsBack) dxwss.PushBackBufferSurface((LPDIRECTDRAWSURFACE)*obp, iObjectVersion); - else dxwss.PopSurface((LPDIRECTDRAWSURFACE)*obp); + else dxwss.PopSurface((LPDIRECTDRAWSURFACE)*obp); // no primary, no backbuffer, then pop. // v2.02.13: seems that hooking inconditionally gives troubles. What is the proper safe hook condition? HookDDSurface((LPDIRECTDRAWSURFACE *)obp, dxw.dwDDVersion, FALSE); } - DWORD dwCaps; - if (dwCaps = dxwcdb.GetCaps((LPDIRECTDRAWSURFACE)lpdds)) { - OutTrace("QueryInterface(S): PASS caps=%x lpdds=%x->%x\n", dwCaps, lpdds, *obp); - dxwcdb.PushCaps(*(LPDIRECTDRAWSURFACE *)obp,dwCaps); + dwCaps = dxwcdb.GetCaps((LPDIRECTDRAWSURFACE)lpdds); + if (dwCaps) { + OutTraceDW("QueryInterface(S): PASS lpdds=%x->%x caps=%x(%s)\n", lpdds, *obp, dwCaps, ExplainDDSCaps(dwCaps)); + dxwcdb.PushCaps(*(LPDIRECTDRAWSURFACE *)obp, dwCaps); } + else { + OutTraceDW("QueryInterface(S): NO CAPS\n"); + } break; case TYPE_OBJECT_DIRECT3D: HookDirect3DSession((LPDIRECTDRAW *)obp, iObjectVersion); diff --git a/dll/syslibs.h b/dll/syslibs.h index 95f0ca4..29aeb4c 100644 --- a/dll/syslibs.h +++ b/dll/syslibs.h @@ -299,6 +299,8 @@ typedef HBITMAP (WINAPI *LoadBitmapA_Type)(HINSTANCE, LPCSTR); typedef BOOL (WINAPI *EnumWindows_Type)(WNDENUMPROC, LPARAM); typedef BOOL (WINAPI *GetMessage_Type)(LPMSG, HWND, UINT, UINT); typedef BOOL (WINAPI *PostMessage_Type)(HWND, UINT, WPARAM, LPARAM); +typedef BOOL (WINAPI *AdjustWindowRect_Type)(LPRECT, DWORD, BOOL); +typedef BOOL (WINAPI *AdjustWindowRectEx_Type)(LPRECT, DWORD, BOOL, DWORD); // Winmm.dll: typedef MCIERROR(WINAPI *mciSendCommand_Type)(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR); @@ -620,6 +622,8 @@ DXWEXTERN LoadBitmapA_Type pLoadBitmapA DXWINITIALIZED; DXWEXTERN EnumWindows_Type pEnumWindows DXWINITIALIZED; DXWEXTERN GetMessage_Type pGetMessageA, pGetMessageW DXWINITIALIZED; DXWEXTERN PostMessage_Type pPostMessageA, pPostMessageW DXWINITIALIZED; +DXWEXTERN AdjustWindowRect_Type pAdjustWindowRect DXWINITIALIZED; +DXWEXTERN AdjustWindowRectEx_Type pAdjustWindowRectEx DXWINITIALIZED; // Winmm.dll: DXWEXTERN mciSendCommand_Type pmciSendCommandA DXWINITIALIZED; @@ -930,6 +934,8 @@ extern BOOL WINAPI extGetMessageA(LPMSG, HWND, UINT, UINT); extern BOOL WINAPI extGetMessageW(LPMSG, HWND, UINT, UINT); extern BOOL WINAPI extPostMessageA(HWND, UINT, WPARAM, LPARAM); extern BOOL WINAPI extPostMessageW(HWND, UINT, WPARAM, LPARAM); +extern BOOL WINAPI extAdjustWindowRect(LPRECT, DWORD, BOOL); +extern BOOL WINAPI extAdjustWindowRectEx(LPRECT, DWORD, BOOL, DWORD); // Winmm.dll: extern MCIERROR WINAPI extmciSendCommandA(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR); diff --git a/dll/user32.cpp b/dll/user32.cpp index a9e4ddf..cd678da 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -85,7 +85,6 @@ static HookEntryEx_Type Hooks[]={ #ifdef GALAPAGOSTEST // test for Galapagos - {HOOK_HOT_CANDIDATE, 0, "GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow}, {HOOK_HOT_CANDIDATE, 0, "GetForegroundWindow", (FARPROC)GetForegroundWindow, (FARPROC *)&pGetForegroundWindow, (FARPROC)extGetForegroundWindow}, {HOOK_HOT_CANDIDATE, 0, "GetFocus", (FARPROC)GetFocus, (FARPROC *)&pGetFocus, (FARPROC)extGetFocus}, {HOOK_HOT_CANDIDATE, 0, "SetFocus", (FARPROC)SetFocus, (FARPROC *)&pSetFocus, (FARPROC)extSetFocus}, @@ -138,6 +137,9 @@ static HookEntryEx_Type Hooks[]={ //{HOOK_IAT_CANDIDATE, 0, "LoadBitmapA", (FARPROC)NULL, (FARPROC *)&pLoadBitmapA, (FARPROC)extLoadBitmapA}, {HOOK_IAT_CANDIDATE, 0, "EnumWindows", (FARPROC)NULL, (FARPROC *)&pEnumWindows, (FARPROC)extEnumWindows}, + {HOOK_IAT_CANDIDATE, 0, "AdjustWindowRect", (FARPROC)NULL, (FARPROC *)&pAdjustWindowRect, (FARPROC)extAdjustWindowRect}, + {HOOK_IAT_CANDIDATE, 0, "AdjustWindowRectEx", (FARPROC)AdjustWindowRectEx, (FARPROC *)&pAdjustWindowRectEx, (FARPROC)extAdjustWindowRectEx}, + {HOOK_HOT_CANDIDATE, 0, "GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; @@ -476,7 +478,7 @@ void dxwFixWindowPos(char *ApiName, HWND hwnd, LPARAM lParam) dwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); hMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd); - AdjustWindowRectEx(&full, dwStyle, (hMenu!=NULL), dwExStyle); + (*pAdjustWindowRectEx)(&full, dwStyle, (hMenu!=NULL), dwExStyle); if (hMenu && (hMenu != (HMENU)-1)) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){}; BorderX= full.right - full.left - client.right; BorderY= full.bottom - full.top - client.bottom; @@ -516,7 +518,7 @@ void dxwFixWindowPos(char *ApiName, HWND hwnd, LPARAM lParam) dwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); hMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd); - AdjustWindowRectEx(&wrect, dwStyle, (hMenu!=NULL), dwExStyle); + (*pAdjustWindowRectEx)(&wrect, dwStyle, (hMenu!=NULL), dwExStyle); minx = wrect.right - wrect.left; miny = wrect.bottom - wrect.top; if(wp->cx < minx) wp->cx = minx; @@ -940,7 +942,7 @@ BOOL WINAPI extSetWindowPos(HWND hwnd, HWND hWndInsertAfter, int X, int Y, int c dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); // BEWARE: from MSDN - If the window is a child window, the return value is undefined. hMenu = (dwCurStyle & WS_CHILD) ? NULL : GetMenu(hwnd); - AdjustWindowRectEx(&rect, dwCurStyle, (hMenu!=NULL), dwExStyle); + (*pAdjustWindowRectEx)(&rect, dwCurStyle, (hMenu!=NULL), dwExStyle); if (hMenu && (hMenu != (HMENU)-1)) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){}; cx=rect.right; cy=rect.bottom; OutTraceDW("SetWindowPos: main form hwnd=%x fixed size=(%d,%d)\n", hwnd, cx, cy); @@ -3084,7 +3086,7 @@ BOOL WINAPI extUpdateWindow(HWND hwnd) } ret=(*pUpdateWindow)(hwnd); - if(!ret) OutTraceE("UpdateWindow: ERROR er=%d\n", GetLastError()); + if(!ret) OutTraceE("UpdateWindow: ERROR err=%d\n", GetLastError()); return ret; } @@ -3203,7 +3205,8 @@ HWND WINAPI extGetActiveWindow(void) { HWND ret; ret=(*pGetActiveWindow)(); - if(dxw.Windowize && dxw.IsFullScreen()) { + OutTraceDW("GetActiveWindow: ret=%x\n", ret); + if((dxw.dwFlags8 & WININSULATION) && dxw.Windowize && dxw.IsFullScreen()) { OutTraceDW("GetActiveWindow: ret=%x->%x\n", ret, dxw.GethWnd()); return dxw.GethWnd(); } @@ -4072,7 +4075,7 @@ INT_PTR WINAPI extDialogBoxIndirectParamA(HINSTANCE hInstance, LPCDLGTEMPLATE hD { //INT_PTR ret; // MessageBox(0, "DialogBoxIndirectParamA", "step", 0); - OutTrace("DialogBoxIndirectParamA: hInstance=%x pos=(%d,%d) size=(%dx%d) hWndParent=%x, lpDialogFunc=%x dwInitParam=%x\n", + OutTraceDW("DialogBoxIndirectParamA: hInstance=%x pos=(%d,%d) size=(%dx%d) hWndParent=%x, lpDialogFunc=%x dwInitParam=%x\n", hInstance, hDialogTemplate->x, hDialogTemplate->y, hDialogTemplate->cx, hDialogTemplate->cy, hWndParent, lpDialogFunc, dwInitParam); return (*pDialogBoxIndirectParamA)(hInstance, hDialogTemplate, hWndParent, lpDialogFunc, dwInitParam); } @@ -4080,27 +4083,91 @@ INT_PTR WINAPI extDialogBoxIndirectParamA(HINSTANCE hInstance, LPCDLGTEMPLATE hD HBITMAP WINAPI extLoadBitmapA(HINSTANCE hInstance, LPCSTR lpBitmapName) { HBITMAP ret; - OutTrace("LoadBitmapA: hinst=%x name=%s\n", hInstance, lpBitmapName); + OutTraceDW("LoadBitmapA: hinst=%x name=%s\n", hInstance, lpBitmapName); ret = (*pLoadBitmapA)(hInstance, lpBitmapName); if(ret){ - OutTrace("LoadBitmapA: hbitmap=%x\n", ret); + OutTraceDW("LoadBitmapA: hbitmap=%x\n", ret); } else{ - OutTrace("LoadBitmapA: ERROR err=%d\n", GetLastError()); + OutTraceE("LoadBitmapA: ERROR err=%d\n", GetLastError()); } return ret; } BOOL WINAPI extEnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam) { - OutTrace("EnumerateWindows\n"); + OutTraceDW("EnumerateWindows\n"); if(dxw.dwFlags8 & WININSULATION){ - OutTrace("EnumerateWindows: BYPASS\n"); + OutTraceDW("EnumerateWindows: BYPASS\n"); return TRUE; } return (*pEnumWindows)(lpEnumFunc, lParam); } +static void RedirectCoordinates(LPRECT lpRect) +{ + BOOL IsBiggerThanWin; + BOOL IsBiggerThanScreen; + long w, h; + // try to determine if the coordinates could belong to a fullscreen main win + w = lpRect->right - lpRect->left; + h = lpRect->bottom - lpRect->top; + IsBiggerThanWin = (w >= dxw.iSizX) && (h >= dxw.iSizY); + IsBiggerThanScreen = (w >= (long)dxw.GetScreenWidth()) && (h >= (long)dxw.GetScreenHeight()); + if(IsBiggerThanWin || IsBiggerThanScreen){ + WINDOWPOS wp; + dxw.CalculateWindowPos(NULL, dxw.GetScreenWidth(), dxw.GetScreenHeight(), &wp); + lpRect->left = wp.x; + lpRect->right = wp.x + wp.cx; + lpRect->top = wp.y; + lpRect->bottom = wp.y + wp.cy; + OutTraceDW("AdjustWindowRect: FIX rect=(%d,%d)-(%d,%d)\n", + lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); + } +} + +BOOL WINAPI extAdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu) +{ + BOOL ret; + OutTraceDW("AdjustWindowRect: IN rect=(%d,%d)-(%d,%d) style=%x(%s) menu=%x\n", + lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, + dwStyle, ExplainStyle(dwStyle), bMenu); + + if(dxw.dwFlags1 & LOCKWINPOS) RedirectCoordinates(lpRect); + + ret = pAdjustWindowRect(lpRect, dwStyle, bMenu); + + if(ret){ + OutTraceDW("AdjustWindowRect: OUT rect=(%d,%d)-(%d,%d)\n", + lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); + } + else{ + OutTraceE("AdjustWindowRect ERROR: err=%d\n", GetLastError()); + } + return ret; +} + +BOOL WINAPI extAdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle) +{ + BOOL ret; + OutTraceDW("AdjustWindowRectEx: IN rect=(%d,%d)-(%d,%d) style=%x(%s) menu=%x exstyle=%x(%s)\n", + lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, + dwStyle, ExplainStyle(dwStyle), bMenu, dwExStyle, ExplainExStyle(dwExStyle)); + + if(dxw.dwFlags1 & LOCKWINPOS) RedirectCoordinates(lpRect); + + ret = pAdjustWindowRectEx(lpRect, dwStyle, bMenu, dwExStyle); + + if(ret){ + OutTraceDW("AdjustWindowRectEx: OUT rect=(%d,%d)-(%d,%d)\n", + lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); + } + else{ + OutTraceE("AdjustWindowRectEx ERROR: err=%d\n", GetLastError()); + } + return ret; +} + // To do: // GrayStringA // GrayStringW \ No newline at end of file diff --git a/dll/winproc.cpp b/dll/winproc.cpp index 4988a3c..2615756 100644 --- a/dll/winproc.cpp +++ b/dll/winproc.cpp @@ -303,7 +303,9 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp break; case WM_NCCALCSIZE: case WM_NCPAINT: - if((dxw.dwFlags1 & LOCKWINPOS) && (hwnd == dxw.GethWnd()) && dxw.IsFullScreen()){ // v2.02.30: don't alter child and other windows.... + // v2.02.30: don't alter child and other windows.... + // v2.04.09: comment inconsistent with code. Added '!' to if expression .... + if(!((dxw.dwFlags1 & LOCKWINPOS) && (hwnd == dxw.GethWnd()) && dxw.IsFullScreen())){ OutTraceDW("WindowProc: %s wparam=%x\n", ExplainWinMessage(message), wparam); return (*pDefWindowProcA)(hwnd, message, wparam, lparam); } diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 445a770..53e7361 100644 Binary files a/host/dxwndhost.aps and b/host/dxwndhost.aps differ diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 9c21e32..f928197 100644 Binary files a/host/dxwndhost.rc and b/host/dxwndhost.rc differ diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index a06851e..d1b93ff 100644 Binary files a/host/dxwndhost.vs2008.suo and b/host/dxwndhost.vs2008.suo differ