1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00

v2_03_57_src

Former-commit-id: 56291ae33fff04971e7e7e7e3ec3de827f0f4284
This commit is contained in:
gho tik 2016-03-16 12:45:22 -04:00 committed by Refael ACkermann
parent 2bde039a5b
commit 9aca112da3
32 changed files with 625 additions and 61 deletions

View File

@ -218,6 +218,8 @@
#define LIMITDDRAW 0x00000001 // Limit the maximum available ddraw object version #define LIMITDDRAW 0x00000001 // Limit the maximum available ddraw object version
#define DISABLEDISABLEALTTAB 0x00000002 // Disables the compatibility patch that disables the Alt-Tab key and other special combinations #define DISABLEDISABLEALTTAB 0x00000002 // Disables the compatibility patch that disables the Alt-Tab key and other special combinations
#define FIXCLIPPERAREA 0x00000004 // fix clipper area in ddraw & GDI shared DC mode #define FIXCLIPPERAREA 0x00000004 // fix clipper area in ddraw & GDI shared DC mode
#define HOOKDIRECTSOUND 0x00000008
#define HOOKSMACKW32 0x00000010
// eighth flags DWORD dxw.dwFlags8: // eighth flags DWORD dxw.dwFlags8:

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:cf21cb7f4efa14ec9c887287c8761ec1bc41387407bb79ad1e0a828389390503 oid sha256:f5024ec55f3917b2908e231698222147516bb21efda0938c969100fc43f7fd9f
size 625664 size 626688

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:4853f064ace470ed224072af04f8ad1f48d985299be7f51b3adf36a279b4222f oid sha256:b2afb528861c05b34730d201b567c3e47f969732676f7d9fd998ffe8cf16674d
size 549376 size 553472

120
build/dxwnd.ini Normal file
View File

@ -0,0 +1,120 @@
[window]
exportpath=D:\DxWnd\exports\
exepath=D:\Games\msgolf\Golf '98 Trial\
posx=981
posy=464
sizx=320
sizy=200
[target]
title0=Miscrosoft Golf '98 Trial
path0=D:\Games\msgolf\Golf '98 Trial\game.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"InstallType"="1"\n"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"\n"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\msgolf\\Golf '98 Trial"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009\n\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"InstallType"="1"\n"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"\n"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\msgolf\\Golf '98 Trial"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009
ver0=0
coord0=0
flag0=2101474
flagg0=1476395016
flagh0=1044
flagi0=1210187780
flagj0=128
flagk0=327680
flagl0=4
flagm0=0
tflag0=0
posx0=50
posy0=50
sizx0=880
sizy0=660
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=0
title1=M1 Tank Platoon 2
path1=D:\Games\M1 Tank Platoon 2\M1TP2.exe
launchpath1=
module1=
opengllib1=
notes1=
registry1=
ver1=0
coord1=0
flag1=134238242
flagg1=1207959552
flagh1=20
flagi1=138412036
flagj1=268439680
flagk1=0
flagl1=0
flagm1=0
tflag1=0
posx1=50
posy1=50
sizx1=800
sizy1=600
maxfps1=0
initts1=8
winver1=0
maxres1=-1
swapeffect1=0
maxddinterface1=7
title2=Imperialism II
path2=D:\Games\Imperialism 2\imperialism II.exe
launchpath2=
module2=
opengllib2=
notes2=
registry2=
ver2=0
coord2=0
flag2=679485474
flagg2=1207959552
flagh2=20
flagi2=4194308
flagj2=0
flagk2=262144
flagl2=4
flagm2=0
tflag2=0
posx2=50
posy2=50
sizx2=800
sizy2=600
maxfps2=0
initts2=0
winver2=0
maxres2=0
swapeffect2=0
maxddinterface2=7
title3=Imperialism
path3=D:\Games\Imperialism\Imperialism.exe
launchpath3=
module3=
opengllib3=
notes3=Note:\nMap zooming is currently not workind. Do not click on the magnifying glass, \nor the game will crash.
registry3=
ver3=0
coord3=0
flag3=1746935843
flagg3=1744830464
flagh3=20
flagi3=71303172
flagj3=128
flagk3=262144
flagl3=4
flagm3=0
tflag3=0
posx3=50
posy3=50
sizx3=800
sizy3=600
maxfps3=0
initts3=0
winver3=0
maxres3=-1
swapeffect3=0
maxddinterface3=7

31
build/dxwnd.reg Normal file
View File

@ -0,0 +1,31 @@
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]
"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"
"InstallType"="1"
"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"
"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"
"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"
"Launched"="1"
"PID"=""
"Path"="D:\\Games\\msgolf\\Golf '98 Trial"
"VersionType"="TrialVersion"
"InstalledGroup"="1"
"LangID"=dword:00000009
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98]
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]
"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"
"InstallType"="1"
"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"
"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"
"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"
"Launched"="1"
"PID"=""
"Path"="D:\\Games\\msgolf\\Golf '98 Trial"
"VersionType"="TrialVersion"
"InstalledGroup"="1"
"LangID"=dword:00000009

View File

@ -7,8 +7,8 @@ opengllib0=
notes0= notes0=
registry0= registry0=
ver0=0 ver0=0
coord0=1 coord0=0
flag0=136314915 flag0=137363491
flagg0=1207959552 flagg0=1207959552
flagh0=20 flagh0=20
flagi0=138412036 flagi0=138412036
@ -21,12 +21,15 @@ minx0=0
miny0=0 miny0=0
maxx0=0 maxx0=0
maxy0=0 maxy0=0
posx0=0 posx0=50
posy0=0 posy0=50
sizx0=1280 sizx0=800
sizy0=960 sizy0=600
maxfps0=0 maxfps0=0
initts0=0 initts0=0
winver0=0 winver0=0
maxres0=-1 maxres0=-1
swapeffect0=0 swapeffect0=0
flagl0=0
flagm0=0
maxddinterface0=7

View File

@ -0,0 +1,29 @@
[target]
title0=Duke Nukem Forever
path0=D:\Games\Duke Nukem Forever\System\DukeForever.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=136314914
flagg0=1207959552
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7

View File

@ -10,7 +10,7 @@ flag0=134238242
flagg0=1207959552 flagg0=1207959552
flagh0=20 flagh0=20
flagi0=138412036 flagi0=138412036
flagj0=4224 flagj0=268439680
tflag0=0 tflag0=0
initx0=0 initx0=0
inity0=0 inity0=0
@ -26,3 +26,10 @@ maxfps0=0
initts0=8 initts0=8
winver0=0 winver0=0
maxres0=-1 maxres0=-1
notes0=
registry0=
flagk0=0
flagl0=0
flagm0=0
swapeffect0=0
maxddinterface0=7

View File

@ -0,0 +1,29 @@
[target]
title0=Miscrosoft Golf '98 Trial
path0=D:\Games\msgolf\Golf '98 Trial\game.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"InstallType"="1"\n"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"\n"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\msgolf\\Golf '98 Trial"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009\n\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"InstallType"="1"\n"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"\n"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\msgolf\\Golf '98 Trial"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009
ver0=0
coord0=0
flag0=2101474
flagg0=1476395016
flagh0=1044
flagi0=1210187780
flagj0=128
flagk0=327680
flagl0=4
flagm0=0
tflag0=0
posx0=50
posy0=50
sizx0=880
sizy0=660
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=0

View File

@ -1,5 +0,0 @@
[window]
posx=1182
posy=638
sizx=320
sizy=200

View File

@ -1042,4 +1042,11 @@ add: "Acquire admin caps" flag to self elevate DxWnd if configured as necessary
add: added third mode to handle potentially offending messages, that is process them by the Window default process routine WinDefaultProc. Good for "Red Alert 2". add: added third mode to handle potentially offending messages, that is process them by the Window default process routine WinDefaultProc. Good for "Red Alert 2".
add: "fix clipper area in shared DC", temporary solution to adapt the shared DC mode to the different situations (yet to finish). add: "fix clipper area in shared DC", temporary solution to adapt the shared DC mode to the different situations (yet to finish).
fix: fully integrated the patch for "Silver" game: returning backbuffer as a doublebuffer also when requested with DDSCAPS_VIDEOMEMORY caps. fix: fully integrated the patch for "Silver" game: returning backbuffer as a doublebuffer also when requested with DDSCAPS_VIDEOMEMORY caps.
add: FunkyFr3sh addition to process WM_SYSCOMMAND SC_CLOSE and force program termination when requested by "Terminate on window close" option. add: FunkyFr3sh addition to process WM_SYSCOMMAND SC_CLOSE and force program termination when requested by "Terminate on window close" option.
v2.03.57
fix: improved handling of clipping regions in shared dc mode
add: added DWM status to log file
add: flags for preliminary hook of DirectSound and Smack libraries
fix: changed icon colors (yellow for red, doesn't suggest the idea of error or danger)
add: menu commands for entry movement (top, bottom, up, down) or duplication

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b34beff662415ef318ea0bba7f0f01faf8a5593e3903e4645e290077cd74d6e3
size 2765965

View File

@ -44,10 +44,12 @@ ULONG WINAPI extReleaseD4(LPDIRECTDRAW);
ULONG WINAPI extReleaseD7(LPDIRECTDRAW); ULONG WINAPI extReleaseD7(LPDIRECTDRAW);
/*** IDirectDraw methods ***/ /*** IDirectDraw methods ***/
HRESULT WINAPI extCreateClipper(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*); HRESULT WINAPI extCreateClipper(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*);
HRESULT WINAPI extCreatePalette(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *); HRESULT WINAPI extCreatePalette1(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);
HRESULT WINAPI extCreatePalette2(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);
HRESULT WINAPI extCreatePalette4(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);
HRESULT WINAPI extCreatePalette7(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);
HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);
HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);
HRESULT WINAPI extCreateSurface3(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);
HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *);
HRESULT WINAPI extCreateSurface7(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extCreateSurface7(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *);
HRESULT WINAPI extDuplicateSurface(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extDuplicateSurface(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE *);
@ -56,7 +58,10 @@ HRESULT WINAPI extGetDisplayMode1(LPDIRECTDRAW, LPDDSURFACEDESC);
HRESULT WINAPI extGetDisplayMode2(LPDIRECTDRAW, LPDDSURFACEDESC); HRESULT WINAPI extGetDisplayMode2(LPDIRECTDRAW, LPDDSURFACEDESC);
HRESULT WINAPI extGetDisplayMode4(LPDIRECTDRAW, LPDDSURFACEDESC2); HRESULT WINAPI extGetDisplayMode4(LPDIRECTDRAW, LPDDSURFACEDESC2);
HRESULT WINAPI extGetDisplayMode7(LPDIRECTDRAW, LPDDSURFACEDESC2); HRESULT WINAPI extGetDisplayMode7(LPDIRECTDRAW, LPDDSURFACEDESC2);
HRESULT WINAPI extGetGDISurface(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extGetGDISurface1(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);
HRESULT WINAPI extGetGDISurface2(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);
HRESULT WINAPI extGetGDISurface4(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);
HRESULT WINAPI extGetGDISurface7(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);
HRESULT WINAPI extEnumDisplayModes1(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK); HRESULT WINAPI extEnumDisplayModes1(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK);
HRESULT WINAPI extEnumDisplayModes4(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2); HRESULT WINAPI extEnumDisplayModes4(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2);
HRESULT WINAPI extInitialize(LPDIRECTDRAW, FAR GUID *); HRESULT WINAPI extInitialize(LPDIRECTDRAW, FAR GUID *);
@ -163,7 +168,10 @@ ReleaseD_Type pReleaseD4 = NULL;
ReleaseD_Type pReleaseD7 = NULL; ReleaseD_Type pReleaseD7 = NULL;
Compact_Type pCompact; Compact_Type pCompact;
CreateClipper_Type pCreateClipper=NULL; CreateClipper_Type pCreateClipper=NULL;
CreatePalette_Type pCreatePalette; CreatePalette_Type pCreatePalette1;
CreatePalette_Type pCreatePalette2;
CreatePalette_Type pCreatePalette4;
CreatePalette_Type pCreatePalette7;
CreateSurface1_Type pCreateSurface1; CreateSurface1_Type pCreateSurface1;
CreateSurface1_Type pCreateSurface2; CreateSurface1_Type pCreateSurface2;
CreateSurface1_Type pCreateSurface3; CreateSurface1_Type pCreateSurface3;
@ -184,7 +192,10 @@ GetDisplayMode_Type pGetDisplayMode2;
GetDisplayMode4_Type pGetDisplayMode4; GetDisplayMode4_Type pGetDisplayMode4;
GetDisplayMode4_Type pGetDisplayMode7; GetDisplayMode4_Type pGetDisplayMode7;
GetFourCCCodes_Type pGetFourCCCodes; GetFourCCCodes_Type pGetFourCCCodes;
GetGDISurface_Type pGetGDISurface; GetGDISurface_Type pGetGDISurface1;
GetGDISurface_Type pGetGDISurface2;
GetGDISurface_Type pGetGDISurface4;
GetGDISurface_Type pGetGDISurface7;
GetMonitorFrequency_Type pGetMonitorFrequency; GetMonitorFrequency_Type pGetMonitorFrequency;
GetScanLine_Type pGetScanLine; GetScanLine_Type pGetScanLine;
GetVerticalBlankStatus_Type pGetVerticalBlankStatus; GetVerticalBlankStatus_Type pGetVerticalBlankStatus;
@ -1028,8 +1039,6 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)
// IDIrectDraw::CreateClipper // IDIrectDraw::CreateClipper
SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper, (void **)&pCreateClipper, "CreateClipper(D)"); SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper, (void **)&pCreateClipper, "CreateClipper(D)");
// IDIrectDraw::CreatePalette
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette, (void **)&pCreatePalette, "CreatePalette(D)");
// IDIrectDraw::QueryInterface // IDIrectDraw::QueryInterface
// IDIrectDraw::CreateSurface // IDIrectDraw::CreateSurface
// IDIrectDraw::Release // IDIrectDraw::Release
@ -1038,22 +1047,26 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)
case 1: case 1:
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD1, (void **)&pQueryInterfaceD1, "QueryInterface(D1)"); SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD1, (void **)&pQueryInterfaceD1, "QueryInterface(D1)");
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD1, (void **)&pReleaseD1, "Release(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD1, (void **)&pReleaseD1, "Release(D1)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface1, (void **)&pCreateSurface1, "CreateSurface(S1)"); SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette1, (void **)&pCreatePalette1, "CreatePalette(D1)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface1, (void **)&pCreateSurface1, "CreateSurface(D1)");
break; break;
case 2: case 2:
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD2, (void **)&pQueryInterfaceD2, "QueryInterface(D2)"); SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD2, (void **)&pQueryInterfaceD2, "QueryInterface(D2)");
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD2, (void **)&pReleaseD2, "Release(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD2, (void **)&pReleaseD2, "Release(D2)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface2, (void **)&pCreateSurface2, "CreateSurface(S2)"); SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette2, (void **)&pCreatePalette2, "CreatePalette(D2)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface2, (void **)&pCreateSurface2, "CreateSurface(D2)");
break; break;
case 4: case 4:
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD4, (void **)&pQueryInterfaceD4, "QueryInterface(D4)"); SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD4, (void **)&pQueryInterfaceD4, "QueryInterface(D4)");
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD4, (void **)&pReleaseD4, "Release(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD4, (void **)&pReleaseD4, "Release(D4)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface4, (void **)&pCreateSurface4, "CreateSurface(S4)"); SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette4, (void **)&pCreatePalette4, "CreatePalette(D4)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface4, (void **)&pCreateSurface4, "CreateSurface(D4)");
break; break;
case 7: case 7:
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD7, (void **)&pQueryInterfaceD7, "QueryInterface(D7)"); SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD7, (void **)&pQueryInterfaceD7, "QueryInterface(D7)");
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD7, (void **)&pReleaseD7, "Release(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD7, (void **)&pReleaseD7, "Release(D7)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface7, (void **)&pCreateSurface7, "CreateSurface(S7)"); SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette7, (void **)&pCreatePalette7, "CreatePalette(D7)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface7, (void **)&pCreateSurface7, "CreateSurface(D7)");
break; break;
} }
// IDIrectDraw::DuplicateSurface // IDIrectDraw::DuplicateSurface
@ -1079,30 +1092,32 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)
case 1: case 1:
SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps1D, (void **)&pGetCaps1D, "GetCaps(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps1D, (void **)&pGetCaps1D, "GetCaps(D1)");
SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode1, (void **)&pGetDisplayMode1, "GetDisplayMode(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode1, (void **)&pGetDisplayMode1, "GetDisplayMode(D1)");
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface1, (void **)&pGetGDISurface1, "GetGDISurface(D1)");
SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel1, (void **)&pSetCooperativeLevel1, "SetCooperativeLevel(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel1, (void **)&pSetCooperativeLevel1, "SetCooperativeLevel(D1)");
SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode1, (void **)&pSetDisplayMode1, "SetDisplayMode(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode1, (void **)&pSetDisplayMode1, "SetDisplayMode(D1)");
break; break;
case 2: case 2:
SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps2D, (void **)&pGetCaps2D, "GetCaps(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps2D, (void **)&pGetCaps2D, "GetCaps(D2)");
SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode2, (void **)&pGetDisplayMode2, "GetDisplayMode(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode2, (void **)&pGetDisplayMode2, "GetDisplayMode(D2)");
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface2, (void **)&pGetGDISurface2, "GetGDISurface(D2)");
SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel2, (void **)&pSetCooperativeLevel2, "SetCooperativeLevel(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel2, (void **)&pSetCooperativeLevel2, "SetCooperativeLevel(D2)");
SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode2, (void **)&pSetDisplayMode2, "SetDisplayMode(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode2, (void **)&pSetDisplayMode2, "SetDisplayMode(D2)");
break; break;
case 4: case 4:
SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps4D, (void **)&pGetCaps4D, "GetCaps(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps4D, (void **)&pGetCaps4D, "GetCaps(D4)");
SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode4, (void **)&pGetDisplayMode4, "GetDisplayMode(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode4, (void **)&pGetDisplayMode4, "GetDisplayMode(D4)");
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface4, (void **)&pGetGDISurface4, "GetGDISurface(D4)");
SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel4, (void **)&pSetCooperativeLevel4, "SetCooperativeLevel(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel4, (void **)&pSetCooperativeLevel4, "SetCooperativeLevel(D4)");
SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode4, (void **)&pSetDisplayMode4, "SetDisplayMode(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode4, (void **)&pSetDisplayMode4, "SetDisplayMode(D4)");
break; break;
case 7: case 7:
SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps7D, (void **)&pGetCaps7D, "GetCaps(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps7D, (void **)&pGetCaps7D, "GetCaps(D7)");
SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode7, (void **)&pGetDisplayMode7, "GetDisplayMode(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode7, (void **)&pGetDisplayMode7, "GetDisplayMode(D7)");
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface7, (void **)&pGetGDISurface7, "GetGDISurface(D7)");
SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel7, (void **)&pSetCooperativeLevel7, "SetCooperativeLevel(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel7, (void **)&pSetCooperativeLevel7, "SetCooperativeLevel(D7)");
SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode7, (void **)&pSetDisplayMode7, "SetDisplayMode(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode7, (void **)&pSetDisplayMode7, "SetDisplayMode(D7)");
break; break;
} }
// IDIrectDraw::GetGDISurface
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface, (void **)&pGetGDISurface, "GetGDISurface(D)");
// IDIrectDraw::Initialize // IDIrectDraw::Initialize
SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize, (void **)&pInitialize, "Initialize(D)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize, (void **)&pInitialize, "Initialize(D)");
// IDIrectDraw::WaitForVerticalBlank // IDIrectDraw::WaitForVerticalBlank
@ -2277,6 +2292,14 @@ static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurfa
OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuPrim]", __LINE__)); OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuPrim]", __LINE__));
res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0); res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0);
if(res==DDERR_PRIMARYSURFACEALREADYEXISTS){ if(res==DDERR_PRIMARYSURFACEALREADYEXISTS){
GetGDISurface_Type pGetGDISurface;
switch(dxversion){
default:
case 1: pGetGDISurface = pGetGDISurface1; break;
case 2: pGetGDISurface = pGetGDISurface2; break;
case 4: pGetGDISurface = pGetGDISurface4; break;
case 7: pGetGDISurface = pGetGDISurface7; break;
}
OutTraceDW("CreateSurface: ASSERT DDSEmu_Prim already exists\n"); OutTraceDW("CreateSurface: ASSERT DDSEmu_Prim already exists\n");
if(dxw.Windowize){ if(dxw.Windowize){
// in Windowize mode, the desktop properties are untouched, then the current primary surface can be recycled // in Windowize mode, the desktop properties are untouched, then the current primary surface can be recycled
@ -2380,6 +2403,14 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&
(dxw.dwFlags6 & SYNCPALETTE)){ (dxw.dwFlags6 & SYNCPALETTE)){
if(lpDDP == NULL){ if(lpDDP == NULL){
CreatePalette_Type pCreatePalette;
switch(dxversion){
default:
case 1: pCreatePalette = pCreatePalette1; break;
case 2: pCreatePalette = pCreatePalette2; break;
case 4: pCreatePalette = pCreatePalette4; break;
case 7: pCreatePalette = pCreatePalette7; break;
}
res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);
if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__);
} }
@ -2460,6 +2491,14 @@ static HRESULT BuildPrimaryFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCrea
if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&
(dxw.dwFlags6 & SYNCPALETTE)){ (dxw.dwFlags6 & SYNCPALETTE)){
if(lpDDP == NULL){ if(lpDDP == NULL){
CreatePalette_Type pCreatePalette;
switch(dxversion){
default:
case 1: pCreatePalette = pCreatePalette1; break;
case 2: pCreatePalette = pCreatePalette2; break;
case 4: pCreatePalette = pCreatePalette4; break;
case 7: pCreatePalette = pCreatePalette7; break;
}
res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);
if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__);
} }
@ -2505,6 +2544,14 @@ static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
if(res){ if(res){
if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){ if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){
LPDIRECTDRAWSURFACE lpPrim; LPDIRECTDRAWSURFACE lpPrim;
GetGDISurface_Type pGetGDISurface;
switch(dxversion){
default:
case 1: pGetGDISurface = pGetGDISurface1; break;
case 2: pGetGDISurface = pGetGDISurface2; break;
case 4: pGetGDISurface = pGetGDISurface4; break;
case 7: pGetGDISurface = pGetGDISurface7; break;
}
OutTraceE("CreateSurface: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n"); OutTraceE("CreateSurface: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n");
(*pGetGDISurface)(lpPrimaryDD, &lpPrim); (*pGetGDISurface)(lpPrimaryDD, &lpPrim);
while ((*pReleaseS)(lpPrim)); while ((*pReleaseS)(lpPrim));
@ -2584,6 +2631,14 @@ static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS
if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&
(dxw.dwFlags6 & SYNCPALETTE)){ (dxw.dwFlags6 & SYNCPALETTE)){
if(lpDDP == NULL){ if(lpDDP == NULL){
CreatePalette_Type pCreatePalette;
switch(dxversion){
default:
case 1: pCreatePalette = pCreatePalette1; break;
case 2: pCreatePalette = pCreatePalette2; break;
case 4: pCreatePalette = pCreatePalette4; break;
case 7: pCreatePalette = pCreatePalette7; break;
}
res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);
if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__);
} }
@ -2643,6 +2698,14 @@ static HRESULT BuildBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pC
if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&
(dxw.dwFlags6 & SYNCPALETTE)){ (dxw.dwFlags6 & SYNCPALETTE)){
if(lpDDP == NULL){ if(lpDDP == NULL){
CreatePalette_Type pCreatePalette;
switch(dxversion){
default:
case 1: pCreatePalette = pCreatePalette1; break;
case 2: pCreatePalette = pCreatePalette2; break;
case 4: pCreatePalette = pCreatePalette4; break;
case 7: pCreatePalette = pCreatePalette7; break;
}
res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);
if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__);
} }
@ -2726,6 +2789,14 @@ static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS
if (dxw.dwFlags2 & BACKBUFATTACH) { if (dxw.dwFlags2 & BACKBUFATTACH) {
LPDIRECTDRAWSURFACE lpPrim; LPDIRECTDRAWSURFACE lpPrim;
DDSURFACEDESC2 prim; DDSURFACEDESC2 prim;
GetGDISurface_Type pGetGDISurface;
switch(dxversion){
default:
case 1: pGetGDISurface = pGetGDISurface1; break;
case 2: pGetGDISurface = pGetGDISurface2; break;
case 4: pGetGDISurface = pGetGDISurface4; break;
case 7: pGetGDISurface = pGetGDISurface7; break;
}
(*pGetGDISurface)(lpPrimaryDD, &lpPrim); (*pGetGDISurface)(lpPrimaryDD, &lpPrim);
memset(&prim, 0, sizeof(DDSURFACEDESC2)); memset(&prim, 0, sizeof(DDSURFACEDESC2));
prim.dwSize = (dxversion >= 4) ? sizeof(DDSURFACEDESC2) : sizeof(DDSURFACEDESC); prim.dwSize = (dxversion >= 4) ? sizeof(DDSURFACEDESC2) : sizeof(DDSURFACEDESC);
@ -3088,9 +3159,6 @@ HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIR
HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)
{ return extCreateSurface(2, (CreateSurface_Type)pCreateSurface2, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } { return extCreateSurface(2, (CreateSurface_Type)pCreateSurface2, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }
HRESULT WINAPI extCreateSurface3(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)
{ return extCreateSurface(3, (CreateSurface_Type)pCreateSurface3, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }
HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)
{ return extCreateSurface(4, (CreateSurface_Type)pCreateSurface4, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } { return extCreateSurface(4, (CreateSurface_Type)pCreateSurface4, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }
@ -3789,12 +3857,12 @@ HRESULT WINAPI extWaitForVerticalBlank(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE
#define DDPCAPS_INITIALIZE_LEGACY 0x00000008l #define DDPCAPS_INITIALIZE_LEGACY 0x00000008l
HRESULT WINAPI extCreatePalette(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, HRESULT WINAPI extCreatePalette(int version, CreatePalette_Type pCreatePalette,
LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu) LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
{ {
HRESULT res; HRESULT res;
OutTraceDDRAW("CreatePalette: dwFlags=%x(%s)\n", dwflags, ExplainCreatePaletteFlags(dwflags)); OutTraceDDRAW("CreatePalette: lpdd=%x dwFlags=%x(%s)\n", lpdd, dwflags, ExplainCreatePaletteFlags(dwflags));
if(IsDebug && (dwflags & DDPCAPS_8BIT)) dxw.DumpPalette(256, lpddpa); if(IsDebug && (dwflags & DDPCAPS_8BIT)) dxw.DumpPalette(256, lpddpa);
if(dxw.dwFlags1 & EMULATESURFACE) dwflags &= ~DDPCAPS_PRIMARYSURFACE; if(dxw.dwFlags1 & EMULATESURFACE) dwflags &= ~DDPCAPS_PRIMARYSURFACE;
@ -3806,9 +3874,21 @@ HRESULT WINAPI extCreatePalette(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY
OutTraceDDRAW("CreatePalette: OK lpddp=%x\n", *lplpddp); OutTraceDDRAW("CreatePalette: OK lpddp=%x\n", *lplpddp);
HookDDPalette(lplpddp); HookDDPalette(lplpddp);
return 0; return DD_OK;
} }
HRESULT WINAPI extCreatePalette1(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
{ return extCreatePalette(1, (CreatePalette_Type)pCreatePalette1, lpdd, dwflags, lpddpa, lplpddp, pu); }
HRESULT WINAPI extCreatePalette2(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
{ return extCreatePalette(2, (CreatePalette_Type)pCreatePalette2, lpdd, dwflags, lpddpa, lplpddp, pu); }
HRESULT WINAPI extCreatePalette4(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
{ return extCreatePalette(4, (CreatePalette_Type)pCreatePalette4, lpdd, dwflags, lpddpa, lplpddp, pu); }
HRESULT WINAPI extCreatePalette7(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
{ return extCreatePalette(7, (CreatePalette_Type)pCreatePalette7, lpdd, dwflags, lpddpa, lplpddp, pu); }
HRESULT WINAPI extGetPalette(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp) HRESULT WINAPI extGetPalette(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp)
{ {
HRESULT res; HRESULT res;
@ -4019,7 +4099,7 @@ HRESULT WINAPI extLockDir(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACED
// V2.02.43: Empire Earth does some test Lock operations apparently before the primary surface is created // V2.02.43: Empire Earth does some test Lock operations apparently before the primary surface is created
if(lpPrimaryDD){ if(lpPrimaryDD){
lpDDSPrim=0; lpDDSPrim=0;
res2=(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim); res2=(*pGetGDISurface1)(lpPrimaryDD, &lpDDSPrim);
if(res2) if(res2)
OutTraceE("Lock: GetGDISurface ERROR res=%x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__); OutTraceE("Lock: GetGDISurface ERROR res=%x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__);
else else
@ -4185,6 +4265,7 @@ HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSUR
//RECT screen, rect; //RECT screen, rect;
BOOL IsPrim; BOOL IsPrim;
LPDIRECTDRAWSURFACE lpDDSPrim; LPDIRECTDRAWSURFACE lpDDSPrim;
GetGDISurface_Type pGetGDISurface;
IsPrim=dxwss.IsAPrimarySurface(lpdds); IsPrim=dxwss.IsAPrimarySurface(lpdds);
@ -4202,6 +4283,13 @@ HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSUR
} }
if(dxw.dwFlags1 & LOCKEDSURFACE){ if(dxw.dwFlags1 & LOCKEDSURFACE){
switch(dxversion){
default:
case 1: pGetGDISurface = pGetGDISurface1; break;
case 2: pGetGDISurface = pGetGDISurface2; break;
case 4: pGetGDISurface = pGetGDISurface4; break;
case 7: pGetGDISurface = pGetGDISurface7; break;
}
(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim); (*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);
if(lpdds==lpDDSPrim && lpDDSBuffer){ if(lpdds==lpDDSPrim && lpDDSBuffer){
RECT client; RECT client;
@ -4268,7 +4356,7 @@ HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC)
if(lpDDP==NULL){ if(lpDDP==NULL){
// should link here to the GDI palette? See Hyperblade.... // should link here to the GDI palette? See Hyperblade....
dxw.palNumEntries=256; dxw.palNumEntries=256;
res=(*pCreatePalette)(lpPrimaryDD, DDPCAPS_ALLOW256|DDPCAPS_8BIT|DDPCAPS_INITIALIZE, dxw.palPalEntry, &lpDDP, NULL); res=(*pCreatePalette1)(lpPrimaryDD, DDPCAPS_ALLOW256|DDPCAPS_8BIT|DDPCAPS_INITIALIZE, dxw.palPalEntry, &lpDDP, NULL);
if (res) { if (res) {
OutTraceE("GetDC: CreatePalette ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); OutTraceE("GetDC: CreatePalette ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
return res; return res;
@ -4318,7 +4406,7 @@ HRESULT WINAPI extFlipToGDISurface(LPDIRECTDRAW lpdd)
return DD_OK; return DD_OK;
} }
HRESULT WINAPI extGetGDISurface(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w) HRESULT WINAPI extGetGDISurface(GetGDISurface_Type pGetGDISurface, LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
{ {
int res; int res;
@ -4341,6 +4429,18 @@ HRESULT WINAPI extGetGDISurface(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
return res; return res;
} }
HRESULT WINAPI extGetGDISurface1(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
{ return extGetGDISurface(pGetGDISurface1, lpdd, w); }
HRESULT WINAPI extGetGDISurface2(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
{ return extGetGDISurface(pGetGDISurface2, lpdd, w); }
HRESULT WINAPI extGetGDISurface4(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
{ return extGetGDISurface(pGetGDISurface4, lpdd, w); }
HRESULT WINAPI extGetGDISurface7(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
{ return extGetGDISurface(pGetGDISurface7, lpdd, w); }
// debug function to dump all video modes queried by the DirectDrav::EnumDisplayModes method // debug function to dump all video modes queried by the DirectDrav::EnumDisplayModes method
HRESULT WINAPI EnumModesCallbackDumper(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext) HRESULT WINAPI EnumModesCallbackDumper(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext)

View File

@ -24,7 +24,6 @@
#include "MinHook.h" #include "MinHook.h"
#define SKIPIMEWINDOW TRUE #define SKIPIMEWINDOW TRUE
#define HOOKDIRECTSOUND TRUE
dxwCore dxw; dxwCore dxw;
dxwSStack dxwss; dxwSStack dxwss;
@ -903,8 +902,8 @@ void HookModule(HMODULE base, int dxversion)
(dxw.dwTFlags & OUTREGISTRY)) HookAdvApi32(base); (dxw.dwTFlags & OUTREGISTRY)) HookAdvApi32(base);
HookMSV4WLibs(base); // -- used by Aliens & Amazons demo: what for? HookMSV4WLibs(base); // -- used by Aliens & Amazons demo: what for?
HookAVIFil32(base); HookAVIFil32(base);
//HookSmackW32(base); if(dxw.dwFlags7 & HOOKSMACKW32) HookSmackW32(base);
if (HOOKDIRECTSOUND) HookDirectSound(base); if(dxw.dwFlags7 & HOOKDIRECTSOUND) HookDirectSound(base);
//HookComDlg32(base); //HookComDlg32(base);
} }
@ -1292,6 +1291,21 @@ void HookInit(TARGETMAP *target, HWND hwnd)
dxw.hParentWnd, ClassName, WinText, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle)); dxw.hParentWnd, ClassName, WinText, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
OutTrace("HookInit: target window pos=(%d,%d) size=(%d,%d)\n", dxw.iPosX, dxw.iPosY, dxw.iSizX, dxw.iSizY); OutTrace("HookInit: target window pos=(%d,%d) size=(%d,%d)\n", dxw.iPosX, dxw.iPosY, dxw.iSizX, dxw.iSizY);
dxw.DumpDesktopStatus(); dxw.DumpDesktopStatus();
typedef HRESULT (WINAPI *DwmIsCompositionEnabled_Type)(BOOL *);
DwmIsCompositionEnabled_Type pDwmIsCompositionEnabled = NULL;
HMODULE DwnApiHdl;
DwnApiHdl = LoadLibrary("Dwmapi.dll");
if (DwnApiHdl) pDwmIsCompositionEnabled = (DwmIsCompositionEnabled_Type)GetProcAddress(DwnApiHdl, "DwmIsCompositionEnabled");
char *sRes;
if(pDwmIsCompositionEnabled){
HRESULT res;
BOOL val;
res = (*pDwmIsCompositionEnabled)(&val);
if(res==S_OK) sRes = val ? "ENABLED" : "DISABLED";
else sRes = "ERROR";
}
else sRes = "Unknown";
OutTrace("HookInit: DWMComposition %s\n", sRes);
} }
if (SKIPIMEWINDOW) { if (SKIPIMEWINDOW) {

View File

@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "TlHelp32.h" #include "TlHelp32.h"
#define VERSION "2.03.56" #define VERSION "2.03.57"
#define DDTHREADLOCK 1 #define DDTHREADLOCK 1
//#define LOCKTHREADS //#define LOCKTHREADS

Binary file not shown.

View File

@ -904,7 +904,6 @@ BOOL WINAPI extCreateProcessA(
if(dxw.dwFlags5 & INJECTSON) { if(dxw.dwFlags5 & INJECTSON) {
DEBUG_EVENT debug_event ={0}; DEBUG_EVENT debug_event ={0};
char path[MAX_PATH]; char path[MAX_PATH];
extern char *GetFileNameFromHandle(HANDLE);
DWORD dwContinueStatus = DBG_CONTINUE; DWORD dwContinueStatus = DBG_CONTINUE;
extern BOOL Inject(DWORD, const char *); extern BOOL Inject(DWORD, const char *);
LPVOID LastExceptionPtr = 0; LPVOID LastExceptionPtr = 0;

View File

@ -330,7 +330,7 @@ void dxwSDC::copyDcAttributes(HDC destDC, HDC origDc, POINT origin)
SetTextCharacterExtra(destDC, GetTextCharacterExtra(origDc)); SetTextCharacterExtra(destDC, GetTextCharacterExtra(origDc));
SetTextColor(destDC, GetTextColor(origDc)); SetTextColor(destDC, GetTextColor(origDc));
OutTrace("copyDcAttributes: orig=(%d,%d)\n", origin.x, origin.y); OutTraceB("copyDcAttributes: orig=(%d,%d)\n", origin.x, origin.y);
if(!(*pSetWindowOrgEx)(destDC, -origin.x, -origin.y, NULL)) if(!(*pSetWindowOrgEx)(destDC, -origin.x, -origin.y, NULL))
OutTraceE("copyDcAttributes: SetWindowOrgEx ERROR orig=(%d,%d) err=%d\n", origin.x, origin.y, GetLastError()); OutTraceE("copyDcAttributes: SetWindowOrgEx ERROR orig=(%d,%d) err=%d\n", origin.x, origin.y, GetLastError());
@ -355,35 +355,36 @@ typedef struct
static BOOL CALLBACK excludeClipRectsForOverlappingWindows(HWND hwnd, LPARAM lParam) static BOOL CALLBACK excludeClipRectsForOverlappingWindows(HWND hwnd, LPARAM lParam)
{ {
ExcludeClipRectsData_Type *excludeClipRectsData = (ExcludeClipRectsData_Type *)lParam; ExcludeClipRectsData_Type *excludeClipRectsData = (ExcludeClipRectsData_Type *)lParam;
if (hwnd == dxw.GethWnd()) return FALSE; // stop
if (!IsWindowVisible(hwnd)) return TRUE; // go ahead if (!IsWindowVisible(hwnd)) return TRUE; // go ahead
if (hwnd == excludeClipRectsData->rootWnd) return FALSE; // stop
if(dxw.IsDesktop(hwnd)) return FALSE;
RECT rect = {}; RECT rect = {};
(*pGetWindowRect)(hwnd, &rect); (*pGetClientRect)(hwnd, &rect);
OffsetRect(&rect, -excludeClipRectsData->origin.x, -excludeClipRectsData->origin.y); OffsetRect(&rect, -excludeClipRectsData->origin.x, -excludeClipRectsData->origin.y);
ExcludeClipRect(excludeClipRectsData->compatDc, rect.left, rect.top, rect.right, rect.bottom); ExcludeClipRect(excludeClipRectsData->compatDc, rect.left, rect.top, rect.right, rect.bottom);
OutTrace("dxwSDC::excludeClipRects: hwnd=%x rect=(%d,%d)-(%d,%d)\n", hwnd, rect.left, rect.top, rect.right, rect.bottom); OutTraceB("dxwSDC::excludeClipRects: hwnd=%x rect=(%d,%d)-(%d,%d)\n", hwnd, rect.left, rect.top, rect.right, rect.bottom);
return TRUE; return TRUE;
} }
void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin) void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin)
{ {
OutTrace("dxwSDC::setClippingRegion: compdc=%x origdc=%x origin=(%d,%d)\n", compatDc, origDc, origin.x, origin.y); OutTraceB("dxwSDC::setClippingRegion: compdc=%x origdc=%x origin=(%d,%d)\n", compatDc, origDc, origin.x, origin.y);
HRGN clipRgn = CreateRectRgn(0, 0, 0, 0); HRGN clipRgn = CreateRectRgn(0, 0, 0, 0);
const bool isEmptyClipRgn = (1 != GetRandomRgn(origDc, clipRgn, SYSRGN)); const bool isEmptyClipRgn = (1 != GetRandomRgn(origDc, clipRgn, SYSRGN));
OutTrace("dxwSDC::setClippingRegion: isEmptyClipRgn=%x\n", isEmptyClipRgn); OutTraceB("dxwSDC::setClippingRegion: isEmptyClipRgn=%x\n", isEmptyClipRgn);
// scale clip region // scale clip region
POINT upleft={0, 0}; POINT upleft={0, 0};
//(*pClientToScreen)(dxw.GethWnd(), &upleft); //(*pClientToScreen)(dxw.GethWnd(), &upleft);
(*pClientToScreen)(CurrenthWnd, &upleft); (*pClientToScreen)(CurrenthWnd, &upleft);
if(IsDebug){ if(IsDebug){
OutTrace("dxwSDC::setClippingRegion: upleft=(%d,%d)\n", upleft.x, upleft.y); OutTraceB("dxwSDC::setClippingRegion: upleft=(%d,%d)\n", upleft.x, upleft.y);
} }
OffsetRgn(clipRgn, -upleft.x, -upleft.y); OffsetRgn(clipRgn, -upleft.x, -upleft.y);
if(IsDebug){ if(IsDebug){
RECT RgnBox; RECT RgnBox;
GetRgnBox(clipRgn, &RgnBox); GetRgnBox(clipRgn, &RgnBox);
OutTrace("dxwSDC::setClippingRegion: RgnBox=(%d,%d)-(%d,%d) size=(%dx%d)\n", OutTraceB("dxwSDC::setClippingRegion: RgnBox=(%d,%d)-(%d,%d) size=(%dx%d)\n",
RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom, RgnBox.right-RgnBox.left, RgnBox.bottom-RgnBox.top); RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom, RgnBox.right-RgnBox.left, RgnBox.bottom-RgnBox.top);
} }
// end of scaling // end of scaling
@ -393,13 +394,13 @@ void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin)
HRGN origClipRgn = (*pCreateRectRgn)(0, 0, 0, 0); HRGN origClipRgn = (*pCreateRectRgn)(0, 0, 0, 0);
if (1 == GetClipRgn(origDc, origClipRgn)) if (1 == GetClipRgn(origDc, origClipRgn))
{ {
OutTrace("dxwSDC::setClippingRegion: GetClipRgn==1\n"); OutTraceB("dxwSDC::setClippingRegion: GetClipRgn==1\n");
OffsetRgn(origClipRgn, origin.x, origin.y); OffsetRgn(origClipRgn, origin.x, origin.y);
ExtSelectClipRgn(compatDc, origClipRgn, RGN_AND); ExtSelectClipRgn(compatDc, origClipRgn, RGN_AND);
if(IsDebug){ if(IsDebug){
RECT RgnBox; RECT RgnBox;
GetRgnBox(origClipRgn, &RgnBox); // for logging only GetRgnBox(origClipRgn, &RgnBox); // for logging only
OutTrace("dxwSDC::setClippingRegion: OrigRgnBox=(%d,%d)-(%d,%d)\n", RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom); OutTraceB("dxwSDC::setClippingRegion: OrigRgnBox=(%d,%d)-(%d,%d)\n", RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom);
} }
} }
DeleteObject(origClipRgn); DeleteObject(origClipRgn);
@ -408,10 +409,13 @@ void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin)
// to finish ..... // to finish .....
// on Win10 this part seems unnecessary and giving troubles ..... // on Win10 this part seems unnecessary and giving troubles .....
if (!isEmptyClipRgn){ if (!isEmptyClipRgn){
OutTraceB("dxwSDC::setClippingRegion: isEmptyClipRgn FALSE\n");
HWND hwnd = WindowFromDC(origDc); HWND hwnd = WindowFromDC(origDc);
if (hwnd) if (hwnd && (!dxw.IsDesktop(hwnd))){
{ ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, dxw.GethWnd() };
ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, GetAncestor(hwnd, GA_ROOT) }; //ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, GetAncestor(hwnd, GA_ROOT) };
OutTraceB("dxwSDC::setClippingRegion: compatdc=%x origin=(%d,%d) ancestor=%x\n",
compatDc, origin.x, origin.y, dxw.GethWnd());
EnumWindows(&excludeClipRectsForOverlappingWindows,(LPARAM)(&excludeClipRectsData)); EnumWindows(&excludeClipRectsForOverlappingWindows,(LPARAM)(&excludeClipRectsData));
} }
} }

View File

@ -23,7 +23,7 @@ SmackOpen_Type pSmackOpen = NULL;
SmackStruct * WINAPI extSmackOpen(HANDLE, UINT32, INT32); SmackStruct * WINAPI extSmackOpen(HANDLE, UINT32, INT32);
static HookEntryEx_Type Hooks[]={ static HookEntryEx_Type Hooks[]={
{HOOK_IAT_CANDIDATE, 0, "_SmackOpen@12", (FARPROC)NULL, (FARPROC *)&pSmackOpen, (FARPROC)extSmackOpen}, {HOOK_IAT_CANDIDATE, 0x000E, "_SmackOpen@12", (FARPROC)NULL, (FARPROC *)&pSmackOpen, (FARPROC)extSmackOpen},
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
}; };
@ -67,4 +67,16 @@ SmackStruct * WINAPI extSmackOpen(HANDLE SmackFile, UINT32 flags, INT32 unknown)
return ret; return ret;
} }
/* ---------------------------------------------------------------
Used by M2 Tank Platoon II:
Ordinal 0x0015 name _SmackNextFrame@4
Ordinal 0x000E name _SmackOpen@12
Ordinal 0x0026 name _SmackSoundUseDirectSound@4
Ordinal 0x0012 name _SmackClose@4
Ordinal 0x0013 name _SmackDoFrame@4
Ordinal 0x0017 name _SmackToBuffer@28
Ordinal 0x0020 name _SmackWait@4
/* ------------------------------------------------------------ */

View File

@ -207,7 +207,7 @@ static HookEntryEx_Type SyscallHooks[]={
{HOOK_HOT_CANDIDATE, 0, "FillRect", (FARPROC)NULL, (FARPROC *)&pFillRect, (FARPROC)extFillRect}, {HOOK_HOT_CANDIDATE, 0, "FillRect", (FARPROC)NULL, (FARPROC *)&pFillRect, (FARPROC)extFillRect},
{HOOK_HOT_CANDIDATE, 0, "InvertRect", (FARPROC)NULL, (FARPROC *)&pInvertRect, (FARPROC)extInvertRect}, {HOOK_HOT_CANDIDATE, 0, "InvertRect", (FARPROC)NULL, (FARPROC *)&pInvertRect, (FARPROC)extInvertRect},
{HOOK_HOT_CANDIDATE, 0, "DrawIcon", (FARPROC)NULL, (FARPROC *)&pDrawIcon, (FARPROC)extDrawIcon}, {HOOK_HOT_CANDIDATE, 0, "DrawIcon", (FARPROC)NULL, (FARPROC *)&pDrawIcon, (FARPROC)extDrawIcon},
{HOOK_HOT_CANDIDATE, 0, "DrawIconEx", (FARPROC)NULL, (FARPROC *)&pDrawIconEx, (FARPROC)extDrawIconEx}, {HOOK_IAT_CANDIDATE, 0, "DrawIconEx", (FARPROC)NULL, (FARPROC *)&pDrawIconEx, (FARPROC)extDrawIconEx},
{HOOK_HOT_CANDIDATE, 0, "DrawCaption", (FARPROC)NULL, (FARPROC *)&pDrawCaption, (FARPROC)extDrawCaption}, {HOOK_HOT_CANDIDATE, 0, "DrawCaption", (FARPROC)NULL, (FARPROC *)&pDrawCaption, (FARPROC)extDrawCaption},
//TODO {HOOK_HOT_CANDIDATE, 0, "DrawEdge", (FARPROC)NULL, (FARPROC *)&pDrawEdge, (FARPROC)extDrawEdge}, //TODO {HOOK_HOT_CANDIDATE, 0, "DrawEdge", (FARPROC)NULL, (FARPROC *)&pDrawEdge, (FARPROC)extDrawEdge},
//TODO {HOOK_HOT_CANDIDATE, 0, "DrawFocusRect", (FARPROC)NULL, (FARPROC *)&pDrawFocusRect, (FARPROC)extDrawFocusRect}, //TODO {HOOK_HOT_CANDIDATE, 0, "DrawFocusRect", (FARPROC)NULL, (FARPROC *)&pDrawFocusRect, (FARPROC)extDrawFocusRect},
@ -3559,7 +3559,7 @@ BOOL WINAPI extDrawIcon(HDC hdc, int X, int Y, HICON hIcon)
return ret; return ret;
} }
// not working in HOT PATCH mode
BOOL WINAPI extDrawIconEx( HDC hdc, int xLeft, int yTop, HICON hIcon, int cxWidth, int cyWidth, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags) BOOL WINAPI extDrawIconEx( HDC hdc, int xLeft, int yTop, HICON hIcon, int cxWidth, int cyWidth, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags)
{ {
BOOL ret; BOOL ret;

View File

@ -45,6 +45,8 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_DISABLEDISABLEALTTAB, cTarget->m_DisableDisableAltTab); DDX_Check(pDX, IDC_DISABLEDISABLEALTTAB, cTarget->m_DisableDisableAltTab);
DDX_Check(pDX, IDC_NOIMAGEHLP, cTarget->m_NoImagehlp); DDX_Check(pDX, IDC_NOIMAGEHLP, cTarget->m_NoImagehlp);
DDX_Check(pDX, IDC_REPLACEPRIVOPS, cTarget->m_ReplacePrivOps); DDX_Check(pDX, IDC_REPLACEPRIVOPS, cTarget->m_ReplacePrivOps);
DDX_Check(pDX, IDC_HOOKDIRECTSOUND, cTarget->m_HookDirectSound);
DDX_Check(pDX, IDC_HOOKSMACKW32, cTarget->m_HookSmackW32);
// Registry management // Registry management
DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry); DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry);

View File

@ -58,6 +58,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_SetCompatibility = TRUE; // default true !! m_SetCompatibility = TRUE; // default true !!
m_AEROBoost = TRUE; // default true !! m_AEROBoost = TRUE; // default true !!
m_DiabloTweak = FALSE; m_DiabloTweak = FALSE;
m_HookDirectSound = FALSE;
m_HookSmackW32 = FALSE;
m_EASportsHack = FALSE; m_EASportsHack = FALSE;
m_LegacyAlloc = FALSE; m_LegacyAlloc = FALSE;
m_DisableMaxWinMode = FALSE; m_DisableMaxWinMode = FALSE;

View File

@ -198,6 +198,8 @@ public:
BOOL m_SetCompatibility; BOOL m_SetCompatibility;
BOOL m_AEROBoost; BOOL m_AEROBoost;
BOOL m_DiabloTweak; BOOL m_DiabloTweak;
BOOL m_HookDirectSound;
BOOL m_HookSmackW32;
BOOL m_EASportsHack; BOOL m_EASportsHack;
BOOL m_LegacyAlloc; BOOL m_LegacyAlloc;
BOOL m_DisableMaxWinMode; BOOL m_DisableMaxWinMode;

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -117,6 +117,7 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
ON_COMMAND(ID_TASKBAR_SHOW, OnTaskbarShow) ON_COMMAND(ID_TASKBAR_SHOW, OnTaskbarShow)
ON_COMMAND(ID_MODIFY, OnModify) ON_COMMAND(ID_MODIFY, OnModify)
ON_COMMAND(ID_ADD, OnAdd) ON_COMMAND(ID_ADD, OnAdd)
ON_COMMAND(ID_PDUPLICATE, OnDuplicate)
ON_COMMAND(ID_PEXPORT, OnExport) ON_COMMAND(ID_PEXPORT, OnExport)
ON_COMMAND(ID_PKILL, OnProcessKill) ON_COMMAND(ID_PKILL, OnProcessKill)
ON_COMMAND(ID_FILE_IMPORT, OnImport) ON_COMMAND(ID_FILE_IMPORT, OnImport)
@ -139,6 +140,10 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
ON_COMMAND(ID_DESKTOPCOLORDEPTH_16BPP, OnDesktopcolordepth16bpp) ON_COMMAND(ID_DESKTOPCOLORDEPTH_16BPP, OnDesktopcolordepth16bpp)
ON_COMMAND(ID_DESKTOPCOLORDEPTH_24BPP, OnDesktopcolordepth24bpp) ON_COMMAND(ID_DESKTOPCOLORDEPTH_24BPP, OnDesktopcolordepth24bpp)
ON_COMMAND(ID_DESKTOPCOLORDEPTH_32BPP, OnDesktopcolordepth32bpp) ON_COMMAND(ID_DESKTOPCOLORDEPTH_32BPP, OnDesktopcolordepth32bpp)
ON_COMMAND(ID_MOVE_TOP, OnMoveTop)
ON_COMMAND(ID_MOVE_UP, OnMoveUp)
ON_COMMAND(ID_MOVE_DOWN, OnMoveDown)
ON_COMMAND(ID_MOVE_BOTTOM, OnMoveBottom)
//}}AFX_MSG_MAP //}}AFX_MSG_MAP
END_MESSAGE_MAP() END_MESSAGE_MAP()
@ -307,6 +312,8 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY; if(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY;
if(dlg->m_AEROBoost) t->flags5 |= AEROBOOST; if(dlg->m_AEROBoost) t->flags5 |= AEROBOOST;
if(dlg->m_DiabloTweak) t->flags5 |= DIABLOTWEAK; if(dlg->m_DiabloTweak) t->flags5 |= DIABLOTWEAK;
if(dlg->m_HookDirectSound) t->flags7 |= HOOKDIRECTSOUND;
if(dlg->m_HookSmackW32) t->flags7 |= HOOKSMACKW32;
if(dlg->m_EASportsHack) t->flags5 |= EASPORTSHACK; if(dlg->m_EASportsHack) t->flags5 |= EASPORTSHACK;
if(dlg->m_LegacyAlloc) t->flags6 |= LEGACYALLOC; if(dlg->m_LegacyAlloc) t->flags6 |= LEGACYALLOC;
if(dlg->m_DisableMaxWinMode) t->flags6 |= DISABLEMAXWINMODE; if(dlg->m_DisableMaxWinMode) t->flags6 |= DISABLEMAXWINMODE;
@ -539,6 +546,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_SetCompatibility = t->flags2 & SETCOMPATIBILITY ? 1 : 0; dlg->m_SetCompatibility = t->flags2 & SETCOMPATIBILITY ? 1 : 0;
dlg->m_AEROBoost = t->flags5 & AEROBOOST ? 1 : 0; dlg->m_AEROBoost = t->flags5 & AEROBOOST ? 1 : 0;
dlg->m_DiabloTweak = t->flags5 & DIABLOTWEAK ? 1 : 0; dlg->m_DiabloTweak = t->flags5 & DIABLOTWEAK ? 1 : 0;
dlg->m_HookDirectSound = t->flags7 & HOOKDIRECTSOUND ? 1 : 0;
dlg->m_HookSmackW32 = t->flags7 & HOOKSMACKW32 ? 1 : 0;
dlg->m_EASportsHack = t->flags5 & EASPORTSHACK ? 1 : 0; dlg->m_EASportsHack = t->flags5 & EASPORTSHACK ? 1 : 0;
dlg->m_LegacyAlloc = t->flags6 & LEGACYALLOC ? 1 : 0; dlg->m_LegacyAlloc = t->flags6 & LEGACYALLOC ? 1 : 0;
dlg->m_DisableMaxWinMode = t->flags6 & DISABLEMAXWINMODE ? 1 : 0; dlg->m_DisableMaxWinMode = t->flags6 & DISABLEMAXWINMODE ? 1 : 0;
@ -1676,6 +1685,179 @@ void CDxwndhostView::OnAdd()
} }
} }
void CDxwndhostView::OnDuplicate()
{
POSITION pos;
int i;
CListCtrl& listctrl = GetListCtrl();
if(!(pos = listctrl.GetFirstSelectedItemPosition())) return;
i = listctrl.GetNextSelectedItem(pos);
if (listctrl.GetItemCount()>=MAXTARGETS-1) return; // too many entries to duplicate one!
for(int j=listctrl.GetItemCount(); j>i; j--){
TargetMaps[j+1]=TargetMaps[j];
PrivateMaps[j+1]=PrivateMaps[j];
}
TargetMaps[i+1] = TargetMaps[i];
PrivateMaps[i+1] = PrivateMaps[i];
listctrl.DeleteAllItems();
for(i=0; TargetMaps[i].path[0]; i++) {
LV_ITEM listitem;
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.iImage = SetTargetIcon(TargetMaps[i]);
listitem.pszText = PrivateMaps[i].title;
listctrl.SetItem(&listitem);
listctrl.InsertItem(&listitem);
}
SetTarget(TargetMaps);
this->isUpdated=TRUE;
}
void CDxwndhostView::OnMoveTop()
{
TARGETMAP MapEntry;
PRIVATEMAP TitEntry;
POSITION pos;
int i;
CListCtrl& listctrl = GetListCtrl();
if(!(pos = listctrl.GetFirstSelectedItemPosition())) return;
i = listctrl.GetNextSelectedItem(pos);
if (i==0)return;
MapEntry=TargetMaps[i];
TitEntry=PrivateMaps[i];
for(int j=i; j; j--){
TargetMaps[j]=TargetMaps[j-1];
PrivateMaps[j]=PrivateMaps[j-1];
}
TargetMaps[0]=MapEntry;
PrivateMaps[0]=TitEntry;
listctrl.DeleteAllItems();
for(i=0; TargetMaps[i].path[0]; i++) {
LV_ITEM listitem;
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.iImage = SetTargetIcon(TargetMaps[i]);
listitem.pszText = PrivateMaps[i].title;
listctrl.SetItem(&listitem);
listctrl.InsertItem(&listitem);
}
SetTarget(TargetMaps);
this->isUpdated=TRUE;
}
void CDxwndhostView::OnMoveUp()
{
TARGETMAP MapEntry;
PRIVATEMAP TitEntry;
POSITION pos;
int i;
CListCtrl& listctrl = GetListCtrl();
if(!(pos = listctrl.GetFirstSelectedItemPosition())) return;
i = listctrl.GetNextSelectedItem(pos);
if (i==0)return;
MapEntry=TargetMaps[i-1];
TargetMaps[i-1]=TargetMaps[i];
TargetMaps[i]=MapEntry;
TitEntry=PrivateMaps[i-1];
PrivateMaps[i-1]=PrivateMaps[i];
PrivateMaps[i]=TitEntry;
listctrl.DeleteAllItems();
for(i=0; TargetMaps[i].path[0]; i++) {
LV_ITEM listitem;
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.iImage = SetTargetIcon(TargetMaps[i]);
listitem.pszText = PrivateMaps[i].title;
listctrl.SetItem(&listitem);
listctrl.InsertItem(&listitem);
}
SetTarget(TargetMaps);
this->isUpdated=TRUE;
}
void CDxwndhostView::OnMoveDown()
{
TARGETMAP MapEntry;
PRIVATEMAP TitEntry;
POSITION pos;
int i;
CListCtrl& listctrl = GetListCtrl();
if(!(pos = listctrl.GetFirstSelectedItemPosition())) return;
i = listctrl.GetNextSelectedItem(pos);
if (i==listctrl.GetItemCount()-1)return;
MapEntry=TargetMaps[i+1];
TargetMaps[i+1]=TargetMaps[i];
TargetMaps[i]=MapEntry;
TitEntry=PrivateMaps[i+1];
PrivateMaps[i+1]=PrivateMaps[i];
PrivateMaps[i]=TitEntry;
listctrl.DeleteAllItems();
for(i=0; TargetMaps[i].path[0]; i++) {
LV_ITEM listitem;
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.iImage = SetTargetIcon(TargetMaps[i]);
listitem.pszText = PrivateMaps[i].title;
listctrl.SetItem(&listitem);
listctrl.InsertItem(&listitem);
}
SetTarget(TargetMaps);
this->isUpdated=TRUE;
}
void CDxwndhostView::OnMoveBottom()
{
TARGETMAP MapEntry;
PRIVATEMAP TitEntry;
POSITION pos;
int i, last;
CListCtrl& listctrl = GetListCtrl();
if(!(pos = listctrl.GetFirstSelectedItemPosition())) return;
i = listctrl.GetNextSelectedItem(pos);
last = listctrl.GetItemCount()-1;
if (i==last)return;
MapEntry=TargetMaps[i];
TitEntry=PrivateMaps[i];
for(int j=i; j<last; j++){
TargetMaps[j]=TargetMaps[j+1];
PrivateMaps[j]=PrivateMaps[j+1];
}
TargetMaps[last]=MapEntry;
PrivateMaps[last]=TitEntry;
listctrl.DeleteAllItems();
for(i=0; TargetMaps[i].path[0]; i++) {
LV_ITEM listitem;
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.iImage = SetTargetIcon(TargetMaps[i]);
listitem.pszText = PrivateMaps[i].title;
listctrl.SetItem(&listitem);
listctrl.InsertItem(&listitem);
}
SetTarget(TargetMaps);
this->isUpdated=TRUE;
}
void CDxwndhostView::OnDelete() void CDxwndhostView::OnDelete()
{ {
int i, len; int i, len;
@ -1797,6 +1979,7 @@ DWORD WINAPI TrayIconUpdate(CSystemTray *Tray)
if(gTransientMode) { if(gTransientMode) {
IdleCount++; IdleCount++;
if(IdleCount > 2) { if(IdleCount > 2) {
Tray->HideIcon();
delete(Tray->GetAncestor(GA_ROOTOWNER)); delete(Tray->GetAncestor(GA_ROOTOWNER));
exit(0); exit(0);
} }
@ -1947,6 +2130,9 @@ void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point)
case ID_PADD: case ID_PADD:
OnAdd(); OnAdd();
break; break;
case ID_PDUPLICATE:
OnDuplicate();
break;
case ID_PEXPLORE: case ID_PEXPLORE:
OnExplore(); OnExplore();
break; break;
@ -1992,6 +2178,18 @@ void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point)
case ID_DESKTOPCOLORDEPTH_32BPP: case ID_DESKTOPCOLORDEPTH_32BPP:
OnDesktopcolordepth32bpp(); OnDesktopcolordepth32bpp();
break; break;
case ID_MOVE_TOP:
OnMoveTop();
break;
case ID_MOVE_UP:
OnMoveUp();
break;
case ID_MOVE_DOWN:
OnMoveDown();
break;
case ID_MOVE_BOTTOM:
OnMoveBottom();
break;
} }
CListView::OnRButtonDown(nFlags, point); CListView::OnRButtonDown(nFlags, point);
} }

View File

@ -60,6 +60,7 @@ protected:
//{{AFX_MSG(CDxwndhostView) //{{AFX_MSG(CDxwndhostView)
afx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnAdd(); afx_msg void OnAdd();
afx_msg void OnDuplicate();
afx_msg void OnModify(); afx_msg void OnModify();
afx_msg void OnExport(); afx_msg void OnExport();
afx_msg void OnImport(); afx_msg void OnImport();
@ -97,6 +98,10 @@ protected:
afx_msg void OnDesktopcolordepth16bpp(); afx_msg void OnDesktopcolordepth16bpp();
afx_msg void OnDesktopcolordepth24bpp(); afx_msg void OnDesktopcolordepth24bpp();
afx_msg void OnDesktopcolordepth32bpp(); afx_msg void OnDesktopcolordepth32bpp();
afx_msg void OnMoveTop();
afx_msg void OnMoveUp();
afx_msg void OnMoveDown();
afx_msg void OnMoveBottom();
//}}AFX_MSG //}}AFX_MSG
DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()
}; };

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.