mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_04_20_src
This commit is contained in:
parent
6c06d0dac5
commit
b5e4788f9b
@ -283,6 +283,8 @@
|
|||||||
#define HOOKDLGWIN 0x80000000 // Hook dialog WindowProc
|
#define HOOKDLGWIN 0x80000000 // Hook dialog WindowProc
|
||||||
|
|
||||||
// 9th flags DWORD dxw.dwFlags9:
|
// 9th flags DWORD dxw.dwFlags9:
|
||||||
|
#define FIXTHINFRAME 0x00000001 // Fix window style like OVERLAPPEDWINDOW but with thin border
|
||||||
|
|
||||||
// 10th flags DWORD dxw.dwFlags10:
|
// 10th flags DWORD dxw.dwFlags10:
|
||||||
|
|
||||||
// logging Tflags DWORD:
|
// logging Tflags DWORD:
|
||||||
|
@ -1584,3 +1584,15 @@ fix: joystick api promoted to hot patching to get a more powerful hooking
|
|||||||
add: hooking of WM_STYLECHANGING/STYLECHANGED messages to allow D3D rendering within the window borders instead of over the whole window area - fixes "Nightmare Creatures" and others.
|
add: hooking of WM_STYLECHANGING/STYLECHANGED messages to allow D3D rendering within the window borders instead of over the whole window area - fixes "Nightmare Creatures" and others.
|
||||||
fix: fixed "Need fos Speed 5" peculiarity: QueryInterface of an object on top of itself.
|
fix: fixed "Need fos Speed 5" peculiarity: QueryInterface of an object on top of itself.
|
||||||
|
|
||||||
|
v2.04.20
|
||||||
|
GUI:
|
||||||
|
add: two more 32bit words for additional flags
|
||||||
|
add: timestamp and dxwnd version added to exported files
|
||||||
|
fix: window style selector through radio buttons
|
||||||
|
fix: implementation of View->Shims
|
||||||
|
DLL:
|
||||||
|
add: management of 3DREF surfaces to handle D3D CreateDevice with offscreen surface
|
||||||
|
add: FIXTHINFRAME option to get overlapped window with thin border
|
||||||
|
fix: revised implementation for DirectDrawSurface getCaps and GetSurfaceDesc wrappers
|
||||||
|
add: hooker for SetWindowsHookEx WH_MOUSE_LL events - used by "Royal Tramp 2"
|
||||||
|
fix: added WM_NCMOUSELEAVE to the list of potentially offending messages
|
||||||
|
@ -1054,6 +1054,12 @@ HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface
|
|||||||
dxwss.PushZBufferSurface(*lplpdds, dxversion, lpddsd->ddsCaps.dwCaps);
|
dxwss.PushZBufferSurface(*lplpdds, dxversion, lpddsd->ddsCaps.dwCaps);
|
||||||
OutTraceDW("CreateSurface: ZBufferSize=%d\n", ZBufferSize);
|
OutTraceDW("CreateSurface: ZBufferSize=%d\n", ZBufferSize);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) {
|
||||||
|
OutTraceDW("CreateSurface: lpDD3DRef=%x save 3DREF caps=%x(%s)\n", *lplpdds, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps));
|
||||||
|
dxwss.Push3DRefSurface(*lplpdds, dxversion, lpddsd->ddsCaps.dwCaps);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
135
dll/ddraw.cpp
135
dll/ddraw.cpp
@ -541,10 +541,8 @@ static DWORD GetFlipWaitFlags(DWORD dwFlipFlags)
|
|||||||
|
|
||||||
static DWORD SetPrimaryCaps(DWORD dwCaps)
|
static DWORD SetPrimaryCaps(DWORD dwCaps)
|
||||||
{
|
{
|
||||||
dwCaps |= DDSD_Prim.ddsCaps.dwCaps;
|
|
||||||
dwCaps |= (DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_FRONTBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_VISIBLE); // primary surfaces must be this way
|
dwCaps |= (DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_FRONTBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_VISIBLE); // primary surfaces must be this way
|
||||||
dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // primary surfaces can't be this way
|
dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // primary surfaces can't be this way
|
||||||
if(dwCaps & DDSCAPS_3DDEVICE) dwCaps |= DDSCAPS_LOCALVIDMEM;
|
|
||||||
return dwCaps;
|
return dwCaps;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -553,8 +551,6 @@ static DWORD SetBackBufferCaps(DWORD dwCaps)
|
|||||||
// v2.03.11: added DDSCAPS_FLIP capability to backbuffer surface: "Ignition" checks for it before Flip-ping to primary
|
// v2.03.11: added DDSCAPS_FLIP capability to backbuffer surface: "Ignition" checks for it before Flip-ping to primary
|
||||||
dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_FLIP|DDSCAPS_LOCALVIDMEM); // you never know....
|
dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_FLIP|DDSCAPS_LOCALVIDMEM); // you never know....
|
||||||
dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // backbuffer surfaces can't be this way
|
dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // backbuffer surfaces can't be this way
|
||||||
if(dwCaps & DDSCAPS_3DDEVICE) dwCaps |= DDSCAPS_LOCALVIDMEM;
|
|
||||||
//if(dwCaps & DDSCAPS_3DDEVICE) dwCaps |= (DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX);
|
|
||||||
return dwCaps;
|
return dwCaps;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2336,7 +2332,7 @@ HRESULT WINAPI extSetCooperativeLevel(int dxversion, SetCooperativeLevel_Type pS
|
|||||||
|
|
||||||
if(bFixFrame){
|
if(bFixFrame){
|
||||||
AdjustWindowFrame(hwnd, dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
AdjustWindowFrame(hwnd, dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
||||||
if (dxw.dwFlags1 & FIXWINFRAME) dxw.FixWindowFrame(hwnd);
|
if ((dxw.dwFlags1 & FIXWINFRAME) || (dxw.dwFlags9 & FIXTHINFRAME)) dxw.FixWindowFrame(hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
GetHookInfo()->IsFullScreen=dxw.IsFullScreen();
|
GetHookInfo()->IsFullScreen=dxw.IsFullScreen();
|
||||||
@ -2563,19 +2559,12 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet
|
|||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// arguable utility ....
|
|
||||||
// commented out: causes "Arx Fatalis" crash assigning ZBUFFER to the wrong surface?
|
// Warning: AVOID simulating a ZBUFFER attach to any surface that has not it really attached
|
||||||
// would that be necessary on some game?
|
// otherwise the program steps over but crashes afterwards, as soon as it tries to use the ZBUFFER.
|
||||||
//if(dxw.dwFlags6 & SETZBUFFERBITDEPTHS){
|
// Better return the error (most programs overcome the problem) or change caps policy so that the
|
||||||
// if (lpDDZBuffer && (lpddsc->dwCaps & DDSCAPS_ZBUFFER)){
|
// ZBUFFER becomes attached.
|
||||||
// *lplpddas = lpDDZBuffer;
|
// Ref: "Arx Fatalis", "TOCA Touring Car Championship"
|
||||||
// OutTraceDW("GetAttachedSurface(%d): SIMULATE ZBUFFER attach to %s=%x add=%x\n",
|
|
||||||
// dxversion, IsPrim?"PRIM":(IsBack?"BACK":"PLAIN"), lpdds, lpDDZBuffer);
|
|
||||||
// //if (pAddRefS) (*pAddRefS)(lpDDZBuffer);
|
|
||||||
// lpDDZBuffer->AddRef();
|
|
||||||
// return DD_OK;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
OutTraceE("GetAttachedSurface(%d): ERROR res=%x(%s) at %d\n", dxversion, res, ExplainDDError(res), __LINE__);
|
OutTraceE("GetAttachedSurface(%d): ERROR res=%x(%s) at %d\n", dxversion, res, ExplainDDError(res), __LINE__);
|
||||||
}
|
}
|
||||||
@ -2608,7 +2597,6 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet
|
|||||||
}
|
}
|
||||||
OutTraceDW("GetAttachedSurface(%d): ZBUFFER caps=%x(%s) (%s)\n", dxversion, dwCaps, ExplainDDSCaps(dwCaps), sMode);
|
OutTraceDW("GetAttachedSurface(%d): ZBUFFER caps=%x(%s) (%s)\n", dxversion, dwCaps, ExplainDDSCaps(dwCaps), sMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
@ -4824,44 +4812,58 @@ HRESULT WINAPI cbDump(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext)
|
|||||||
static HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps)
|
static HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
BOOL IsPrim, IsBack, IsZBuf, IsFixed;
|
BOOL IsFixed=FALSE;
|
||||||
IsPrim=dxwss.IsAPrimarySurface(lpdds);
|
int role;
|
||||||
IsBack=dxwss.IsABackBufferSurface(lpdds);
|
SurfaceDB_Type *ps;
|
||||||
IsFixed=FALSE;
|
|
||||||
char *sLabel;
|
char *sLabel;
|
||||||
|
|
||||||
sLabel = "";
|
ps = dxwss.GetSurface(lpdds);
|
||||||
if(IsPrim) sLabel="(PRIM)";
|
|
||||||
if(IsBack) sLabel="(BACK)";
|
|
||||||
|
|
||||||
|
// BEWARE: ZBUFFER surfaces could be created automatically so that they could exist without
|
||||||
|
// being regisered in surface stack. You must query the actual surface capabilities.
|
||||||
res=(*pGetCapsS)(lpdds, caps);
|
res=(*pGetCapsS)(lpdds, caps);
|
||||||
if(res)
|
if(res)
|
||||||
OutTraceE("GetCaps(S%d): ERROR lpdds=%x%s err=%x(%s)\n", dxInterface, lpdds, sLabel, res, ExplainDDError(res));
|
OutTraceE("GetCaps(S%d): ERROR lpdds=%x err=%x(%s)\n", dxInterface, lpdds, res, ExplainDDError(res));
|
||||||
else
|
else
|
||||||
OutTraceDDRAW("GetCaps(S%d): lpdds=%x%s caps=%x(%s)\n", dxInterface, lpdds, sLabel, caps->dwCaps, ExplainDDSCaps(caps->dwCaps));
|
OutTraceDDRAW("GetCaps(S%d): lpdds=%x caps=%x(%s)\n", dxInterface, lpdds, caps->dwCaps, ExplainDDSCaps(caps->dwCaps));
|
||||||
|
|
||||||
IsZBuf=(caps->dwCaps & DDSCAPS_ZBUFFER);
|
sLabel="";
|
||||||
if(IsZBuf) sLabel="(ZBUFFER)";
|
role = SURFACE_ROLE_UNKNOWN;
|
||||||
|
if (ps) {
|
||||||
|
role = ps->uRole;
|
||||||
|
switch(role){
|
||||||
|
case SURFACE_ROLE_PRIMARY: sLabel="(PRIM)"; break;
|
||||||
|
case SURFACE_ROLE_BACKBUFFER: sLabel="(BACK)"; break;
|
||||||
|
case SURFACE_ROLE_ZBUFFER: sLabel="(ZBUF)"; break;
|
||||||
|
case SURFACE_ROLE_3DREF: sLabel="(3DREF)"; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (caps->dwCaps & DDSCAPS_ZBUFFER) {
|
||||||
|
sLabel="(ZBUF)";
|
||||||
|
role = SURFACE_ROLE_ZBUFFER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!(dxw.IsEmulated || dxw.Windowize)) return res;
|
if(!(dxw.IsEmulated || dxw.Windowize)) return res;
|
||||||
|
|
||||||
while(TRUE){ // fake loop
|
switch(role) {
|
||||||
if (IsPrim) {
|
case SURFACE_ROLE_PRIMARY:
|
||||||
IsFixed=TRUE;
|
IsFixed=TRUE;
|
||||||
caps->dwCaps = SetPrimaryCaps(caps->dwCaps);
|
caps->dwCaps = SetPrimaryCaps(dxwss.GetCaps(lpdds));
|
||||||
break;
|
break;
|
||||||
}
|
case SURFACE_ROLE_BACKBUFFER:
|
||||||
if (IsBack) {
|
|
||||||
IsFixed=TRUE;
|
IsFixed=TRUE;
|
||||||
caps->dwCaps = SetBackBufferCaps(caps->dwCaps);
|
caps->dwCaps = SetBackBufferCaps(dxwss.GetCaps(lpdds));
|
||||||
break;
|
break;
|
||||||
}
|
case SURFACE_ROLE_ZBUFFER:
|
||||||
if (IsZBuf) {
|
|
||||||
IsFixed=TRUE;
|
IsFixed=TRUE;
|
||||||
caps->dwCaps = SetZBufferCaps(dxwss.GetCaps(lpdds));
|
caps->dwCaps = SetZBufferCaps(dxwss.GetCaps(lpdds));
|
||||||
break;
|
break;
|
||||||
}
|
case SURFACE_ROLE_3DREF:
|
||||||
break; // inconditional break;
|
IsFixed=TRUE;
|
||||||
|
caps->dwCaps = dxwss.GetCaps(lpdds);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(IsFixed) OutTraceDW("GetCaps(S%d): lpdds=%x FIXED %s caps=%x(%s)\n", dxInterface, lpdds, sLabel, caps->dwCaps, ExplainDDSCaps(caps->dwCaps));
|
if(IsFixed) OutTraceDW("GetCaps(S%d): lpdds=%x FIXED %s caps=%x(%s)\n", dxInterface, lpdds, sLabel, caps->dwCaps, ExplainDDSCaps(caps->dwCaps));
|
||||||
@ -4883,10 +4885,9 @@ HRESULT WINAPI extGetCaps7S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 caps)
|
|||||||
static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd)
|
static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
BOOL IsPrim, IsBack, IsZBuf, IsFixed;
|
BOOL IsFixed = FALSE;
|
||||||
IsPrim=dxwss.IsAPrimarySurface(lpdds);
|
SurfaceDB_Type *ps;
|
||||||
IsBack=dxwss.IsABackBufferSurface(lpdds);
|
int role;
|
||||||
IsFixed=FALSE;
|
|
||||||
char *sLabel;
|
char *sLabel;
|
||||||
|
|
||||||
if (!pGetSurfaceDesc) {
|
if (!pGetSurfaceDesc) {
|
||||||
@ -4894,6 +4895,8 @@ static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetS
|
|||||||
return DDERR_INVALIDPARAMS;
|
return DDERR_INVALIDPARAMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ps = dxwss.GetSurface(lpdds);
|
||||||
|
|
||||||
int prevsize = lpddsd->dwSize;
|
int prevsize = lpddsd->dwSize;
|
||||||
switch(dxversion){
|
switch(dxversion){
|
||||||
case 1:
|
case 1:
|
||||||
@ -4913,37 +4916,51 @@ static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetS
|
|||||||
OutTraceE("GetSurfaceDesc(%d): ERROR err=%x(%s)\n", dxversion, res, ExplainDDError(res));
|
OutTraceE("GetSurfaceDesc(%d): ERROR err=%x(%s)\n", dxversion, res, ExplainDDError(res));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
IsZBuf=(lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER);
|
|
||||||
sLabel="";
|
sLabel="";
|
||||||
if(IsPrim) sLabel="(PRIM)";
|
role = SURFACE_ROLE_UNKNOWN;
|
||||||
if(IsBack) sLabel="(BACK)";
|
if (ps) {
|
||||||
if(IsZBuf) sLabel="(ZBUFFER)";
|
role = ps->uRole;
|
||||||
|
switch(role){
|
||||||
|
case SURFACE_ROLE_PRIMARY: sLabel="(PRIM)"; break;
|
||||||
|
case SURFACE_ROLE_BACKBUFFER: sLabel="(BACK)"; break;
|
||||||
|
case SURFACE_ROLE_ZBUFFER: sLabel="(ZBUF)"; break;
|
||||||
|
case SURFACE_ROLE_3DREF: sLabel="(3DREF)"; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) {
|
||||||
|
sLabel="(ZBUF)";
|
||||||
|
role = SURFACE_ROLE_ZBUFFER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
OutTraceDDRAW("GetSurfaceDesc(%d): lpdds=%x%s %s\n", dxversion, lpdds, sLabel, LogSurfaceAttributes((LPDDSURFACEDESC2)lpddsd, "GetSurfaceDesc", __LINE__));
|
OutTraceDDRAW("GetSurfaceDesc(%d): lpdds=%x%s %s\n", dxversion, lpdds, sLabel, LogSurfaceAttributes((LPDDSURFACEDESC2)lpddsd, "GetSurfaceDesc", __LINE__));
|
||||||
|
|
||||||
if(!(dxw.IsEmulated || dxw.Windowize)) return res;
|
if(!(dxw.IsEmulated || dxw.Windowize)) return res;
|
||||||
|
|
||||||
while(TRUE){ // fake loop
|
switch(role) {
|
||||||
if (IsPrim) {
|
case SURFACE_ROLE_PRIMARY:
|
||||||
IsFixed=TRUE;
|
IsFixed=TRUE;
|
||||||
if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat;
|
//if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat;
|
||||||
lpddsd->ddsCaps.dwCaps = SetPrimaryCaps(lpddsd->ddsCaps.dwCaps);
|
lpddsd->ddsCaps.dwCaps = SetPrimaryCaps(dxwss.GetCaps(lpdds));
|
||||||
lpddsd->dwBackBufferCount=DDSD_Prim.dwBackBufferCount;
|
lpddsd->dwBackBufferCount=DDSD_Prim.dwBackBufferCount;
|
||||||
lpddsd->dwHeight=dxw.GetScreenHeight();
|
lpddsd->dwHeight=dxw.GetScreenHeight();
|
||||||
lpddsd->dwWidth=dxw.GetScreenWidth();
|
lpddsd->dwWidth=dxw.GetScreenWidth();
|
||||||
break;
|
break;
|
||||||
}
|
case SURFACE_ROLE_BACKBUFFER:
|
||||||
if (IsBack) {
|
|
||||||
IsFixed=TRUE;
|
IsFixed=TRUE;
|
||||||
lpddsd->ddsCaps.dwCaps = SetBackBufferCaps(lpddsd->ddsCaps.dwCaps);
|
//if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat; // v2.04.20
|
||||||
|
lpddsd->ddsCaps.dwCaps = SetBackBufferCaps(dxwss.GetCaps(lpdds));
|
||||||
break;
|
break;
|
||||||
}
|
case SURFACE_ROLE_ZBUFFER:
|
||||||
if (IsZBuf) {
|
|
||||||
IsFixed=TRUE;
|
IsFixed=TRUE;
|
||||||
lpddsd->ddsCaps.dwCaps = SetZBufferCaps(dxwss.GetCaps(lpdds));
|
lpddsd->ddsCaps.dwCaps = SetZBufferCaps(dxwss.GetCaps(lpdds));
|
||||||
break;
|
break;
|
||||||
}
|
case SURFACE_ROLE_3DREF:
|
||||||
break; // inconditional break
|
IsFixed=TRUE;
|
||||||
|
lpddsd->ddsCaps.dwCaps = dxwss.GetCaps(lpdds);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(IsFixed){
|
if(IsFixed){
|
||||||
|
@ -110,7 +110,9 @@ static void OutTraceHeader(FILE *fp, DWORD tflags)
|
|||||||
for(i=0, dword=dxw.dwFlags6; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(5,i));
|
for(i=0, dword=dxw.dwFlags6; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(5,i));
|
||||||
for(i=0, dword=dxw.dwFlags7; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(6,i));
|
for(i=0, dword=dxw.dwFlags7; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(6,i));
|
||||||
for(i=0, dword=dxw.dwFlags8; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(7,i));
|
for(i=0, dword=dxw.dwFlags8; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(7,i));
|
||||||
for(i=0, dword=tflags ; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(8,i));
|
for(i=0, dword=dxw.dwFlags9; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(8,i));
|
||||||
|
for(i=0, dword=dxw.dwFlags10;i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(9,i));
|
||||||
|
for(i=0, dword=tflags ; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(10,i));
|
||||||
fprintf(fp, "***\n");
|
fprintf(fp, "***\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1400,10 +1402,10 @@ void HookInit(TARGETMAP *target, HWND hwnd)
|
|||||||
// update window styles: just this window or, when FIXPARENTWIN is set, the father one as well.
|
// update window styles: just this window or, when FIXPARENTWIN is set, the father one as well.
|
||||||
|
|
||||||
if (hwnd && dxw.Windowize && dxw.IsFullScreen()) {
|
if (hwnd && dxw.Windowize && dxw.IsFullScreen()) {
|
||||||
if(dxw.dwFlags1 & FIXWINFRAME) dxw.FixWindowFrame(dxw.hChildWnd);
|
if((dxw.dwFlags1 & FIXWINFRAME) || (dxw.dwFlags9 & FIXTHINFRAME)) dxw.FixWindowFrame(dxw.hChildWnd);
|
||||||
AdjustWindowPos(dxw.hChildWnd, target->sizx, target->sizy);
|
AdjustWindowPos(dxw.hChildWnd, target->sizx, target->sizy);
|
||||||
if(dxw.dwFlags1 & FIXPARENTWIN) {
|
if(dxw.dwFlags1 & FIXPARENTWIN) {
|
||||||
if(dxw.dwFlags1 & FIXWINFRAME) dxw.FixWindowFrame(dxw.hParentWnd);
|
if((dxw.dwFlags1 & FIXWINFRAME) || (dxw.dwFlags9 & FIXTHINFRAME)) dxw.FixWindowFrame(dxw.hParentWnd);
|
||||||
AdjustWindowPos(dxw.hParentWnd, target->sizx, target->sizy);
|
AdjustWindowPos(dxw.hParentWnd, target->sizx, target->sizy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,6 +94,8 @@ void dxwCore::InitTarget(TARGETMAP *target)
|
|||||||
dwFlags6 = target->flags6;
|
dwFlags6 = target->flags6;
|
||||||
dwFlags7 = target->flags7;
|
dwFlags7 = target->flags7;
|
||||||
dwFlags8 = target->flags8;
|
dwFlags8 = target->flags8;
|
||||||
|
dwFlags9 = target->flags9;
|
||||||
|
dwFlags10= target->flags10;
|
||||||
dwTFlags = target->tflags;
|
dwTFlags = target->tflags;
|
||||||
Windowize = (dwFlags2 & WINDOWIZE) ? TRUE : FALSE;
|
Windowize = (dwFlags2 & WINDOWIZE) ? TRUE : FALSE;
|
||||||
IsVisible = TRUE;
|
IsVisible = TRUE;
|
||||||
@ -1256,7 +1258,10 @@ void dxwCore::FixStyle(char *ApiName, HWND hwnd, WPARAM wParam, LPARAM lParam)
|
|||||||
OutTraceDW("%s: new Style=%x(%s)\n",
|
OutTraceDW("%s: new Style=%x(%s)\n",
|
||||||
ApiName, lpSS->styleNew, ExplainStyle(lpSS->styleNew));
|
ApiName, lpSS->styleNew, ExplainStyle(lpSS->styleNew));
|
||||||
if (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style
|
if (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style
|
||||||
lpSS->styleNew= WS_OVERLAPPEDWINDOW;
|
lpSS->styleNew= WS_OVERLAPPEDWINDOW;
|
||||||
|
}
|
||||||
|
if (dxw.dwFlags9 & FIXTHINFRAME){ // set canonical style with thin border
|
||||||
|
lpSS->styleNew= WS_OVERLAPPEDTHIN;
|
||||||
}
|
}
|
||||||
if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value
|
if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value
|
||||||
lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_STYLE);
|
lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_STYLE);
|
||||||
|
@ -4,6 +4,13 @@
|
|||||||
#define DDSQLEN 0x20
|
#define DDSQLEN 0x20
|
||||||
#define MAXFONTS 0x40
|
#define MAXFONTS 0x40
|
||||||
|
|
||||||
|
#define WS_OVERLAPPEDTHIN (WS_OVERLAPPED | \
|
||||||
|
WS_CAPTION | \
|
||||||
|
WS_SYSMENU | \
|
||||||
|
WS_THICKFRAME | \
|
||||||
|
WS_MINIMIZEBOX | \
|
||||||
|
WS_MAXIMIZEBOX)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
DWORD dwTimerType;
|
DWORD dwTimerType;
|
||||||
union{
|
union{
|
||||||
@ -40,7 +47,9 @@ typedef struct {
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
SURFACE_ROLE_PRIMARY = 0,
|
SURFACE_ROLE_PRIMARY = 0,
|
||||||
SURFACE_ROLE_BACKBUFFER,
|
SURFACE_ROLE_BACKBUFFER,
|
||||||
SURFACE_ROLE_ZBUFFER
|
SURFACE_ROLE_ZBUFFER,
|
||||||
|
SURFACE_ROLE_3DREF,
|
||||||
|
SURFACE_ROLE_UNKNOWN
|
||||||
} Enum_Surface_Role_Type;
|
} Enum_Surface_Role_Type;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -259,15 +268,21 @@ public:
|
|||||||
LPDIRECTDRAWSURFACE GetZBufferSurface(void);
|
LPDIRECTDRAWSURFACE GetZBufferSurface(void);
|
||||||
void PushZBufferSurface(LPDIRECTDRAWSURFACE, int, DWORD);
|
void PushZBufferSurface(LPDIRECTDRAWSURFACE, int, DWORD);
|
||||||
BOOL IsAZBufferSurface(LPDIRECTDRAWSURFACE);
|
BOOL IsAZBufferSurface(LPDIRECTDRAWSURFACE);
|
||||||
LPDIRECTDRAWSURFACE GetBackBufferSurface(void); void PopSurface(LPDIRECTDRAWSURFACE);
|
LPDIRECTDRAWSURFACE GetBackBufferSurface(void);
|
||||||
void DuplicateSurface(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, int);
|
void Push3DRefSurface(LPDIRECTDRAWSURFACE, int, DWORD);
|
||||||
|
BOOL IsA3DRefSurface(LPDIRECTDRAWSURFACE);
|
||||||
|
LPDIRECTDRAWSURFACE Get3DRefBufferSurface(void);
|
||||||
|
void PopSurface(LPDIRECTDRAWSURFACE);
|
||||||
|
DWORD DuplicateSurface(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, int);
|
||||||
DWORD GetCaps(LPDIRECTDRAWSURFACE);
|
DWORD GetCaps(LPDIRECTDRAWSURFACE);
|
||||||
|
SurfaceDB_Type *GetSurface(LPDIRECTDRAWSURFACE);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
SurfaceDB_Type SurfaceDB[DDSQLEN+1];
|
SurfaceDB_Type SurfaceDB[DDSQLEN+1];
|
||||||
LPDIRECTDRAWSURFACE lpDDSPrimary;
|
LPDIRECTDRAWSURFACE lpDDSPrimary;
|
||||||
LPDIRECTDRAWSURFACE lpDDSBackBuffer;
|
LPDIRECTDRAWSURFACE lpDDSBackBuffer;
|
||||||
LPDIRECTDRAWSURFACE lpDDSZBuffer;
|
LPDIRECTDRAWSURFACE lpDDSZBuffer;
|
||||||
|
LPDIRECTDRAWSURFACE lpDDS3DRef;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void PushSurface(LPDIRECTDRAWSURFACE, USHORT, USHORT, DWORD);
|
void PushSurface(LPDIRECTDRAWSURFACE, USHORT, USHORT, DWORD);
|
||||||
|
@ -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.04.19.fx1"
|
#define VERSION "2.04.20"
|
||||||
|
|
||||||
#define DDTHREADLOCK 1
|
#define DDTHREADLOCK 1
|
||||||
|
|
||||||
@ -286,7 +286,7 @@ void InjectHook()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *FlagNames[9][32] ={{
|
static char *FlagNames[11][32] ={{
|
||||||
// Flags1
|
// Flags1
|
||||||
"UNNOTIFY", "EMULATESURFACE", "CLIPCURSOR", "NEEDADMINCAPS",
|
"UNNOTIFY", "EMULATESURFACE", "CLIPCURSOR", "NEEDADMINCAPS",
|
||||||
"HOOKDI", "MODIFYMOUSE", "HANDLEEXCEPTIONS", "SAVELOAD",
|
"HOOKDI", "MODIFYMOUSE", "HANDLEEXCEPTIONS", "SAVELOAD",
|
||||||
@ -367,6 +367,24 @@ static char *FlagNames[9][32] ={{
|
|||||||
"BACKGROUNDPRIORITY", "OFFSCREENZBUFFER", "VIRTUALHEAP", "ZBUFFERHARDCLEAN",
|
"BACKGROUNDPRIORITY", "OFFSCREENZBUFFER", "VIRTUALHEAP", "ZBUFFERHARDCLEAN",
|
||||||
"LOADLIBRARYERR", "SHAREDDCHYBRID", "FIXADJUSTWINRECT", "HOOKDLGWIN",
|
"LOADLIBRARYERR", "SHAREDDCHYBRID", "FIXADJUSTWINRECT", "HOOKDLGWIN",
|
||||||
},{
|
},{
|
||||||
|
// Flags9
|
||||||
|
"FIXTHINFRAME", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "", },{
|
||||||
|
// Flags10
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "", },{
|
||||||
// TFlags
|
// TFlags
|
||||||
"OUTTRACE", "OUTDDRAWTRACE", "OUTWINMESSAGES", "OUTCURSORTRACE",
|
"OUTTRACE", "OUTDDRAWTRACE", "OUTWINMESSAGES", "OUTCURSORTRACE",
|
||||||
"OUTSEPARATED", "**", "ASSERTDIALOG", "OUTIMPORTTABLE",
|
"OUTSEPARATED", "**", "ASSERTDIALOG", "OUTIMPORTTABLE",
|
||||||
@ -382,7 +400,7 @@ LPCSTR GetFlagCaption(int flag, int bit)
|
|||||||
{
|
{
|
||||||
//if((flag<0) || (flag>(9*32))) return "";
|
//if((flag<0) || (flag>(9*32))) return "";
|
||||||
//return FlagNames[flag >> 5][flag & 0x1F];
|
//return FlagNames[flag >> 5][flag & 0x1F];
|
||||||
if((flag<0) || (flag>8)) return "";
|
if((flag<0) || (flag>10)) return "";
|
||||||
if((bit<0) || (bit>31)) return "";
|
if((bit<0) || (bit>31)) return "";
|
||||||
return FlagNames[flag][bit];
|
return FlagNames[flag][bit];
|
||||||
}
|
}
|
Binary file not shown.
@ -8,8 +8,8 @@
|
|||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
#include "dxwcore.hpp"
|
#include "dxwcore.hpp"
|
||||||
|
|
||||||
//#define DXW_SURFACE_STACK_TRACING
|
#define DXW_SURFACE_STACK_TRACING
|
||||||
//#define OutTraceSDB OutTrace
|
#define OutTraceSDB OutTrace
|
||||||
|
|
||||||
dxwSStack::dxwSStack()
|
dxwSStack::dxwSStack()
|
||||||
{
|
{
|
||||||
@ -17,6 +17,7 @@ dxwSStack::dxwSStack()
|
|||||||
lpDDSPrimary = NULL;
|
lpDDSPrimary = NULL;
|
||||||
lpDDSBackBuffer = NULL;
|
lpDDSBackBuffer = NULL;
|
||||||
lpDDSZBuffer = NULL;
|
lpDDSZBuffer = NULL;
|
||||||
|
lpDDS3DRef = NULL;
|
||||||
memset(SurfaceDB, 0, sizeof(SurfaceDB));
|
memset(SurfaceDB, 0, sizeof(SurfaceDB));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,6 +32,7 @@ static char *sRole(USHORT role)
|
|||||||
case SURFACE_ROLE_PRIMARY: s="(PRIM)"; break;
|
case SURFACE_ROLE_PRIMARY: s="(PRIM)"; break;
|
||||||
case SURFACE_ROLE_BACKBUFFER: s="(BACK)"; break;
|
case SURFACE_ROLE_BACKBUFFER: s="(BACK)"; break;
|
||||||
case SURFACE_ROLE_ZBUFFER: s="(ZBUF)"; break;
|
case SURFACE_ROLE_ZBUFFER: s="(ZBUF)"; break;
|
||||||
|
case SURFACE_ROLE_3DREF: s="(3DREF)"; break;
|
||||||
default: s="??"; break; // should never happen ...
|
default: s="??"; break; // should never happen ...
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
@ -43,10 +45,12 @@ static void CheckSurfaceList(SurfaceDB_Type *SurfaceDB)
|
|||||||
char sMsg[81];
|
char sMsg[81];
|
||||||
int iPCount = 0;
|
int iPCount = 0;
|
||||||
int iBCount = 0;
|
int iBCount = 0;
|
||||||
|
int iZCount = 0;
|
||||||
for (int i=0;i<DDSQLEN;i++) {
|
for (int i=0;i<DDSQLEN;i++) {
|
||||||
if (SurfaceDB[i].lpdds == NULL) break;
|
if (SurfaceDB[i].lpdds == NULL) break;
|
||||||
if ((SurfaceDB[i].uRole == SURFACE_ROLE_PRIMARY) && SurfaceDB[i].uRef) iPCount++;
|
if ((SurfaceDB[i].uRole == SURFACE_ROLE_PRIMARY) && SurfaceDB[i].uRef) iPCount++;
|
||||||
if ((SurfaceDB[i].uRole == SURFACE_ROLE_BACKBUFFER) && SurfaceDB[i].uRef) iBCount++;
|
if ((SurfaceDB[i].uRole == SURFACE_ROLE_BACKBUFFER) && SurfaceDB[i].uRef) iBCount++;
|
||||||
|
if ((SurfaceDB[i].uRole == SURFACE_ROLE_ZBUFFER) && SurfaceDB[i].uRef) iZCount++;
|
||||||
}
|
}
|
||||||
if(iPCount > 1) {
|
if(iPCount > 1) {
|
||||||
sprintf(sMsg, "Primary count = %d", iPCount);
|
sprintf(sMsg, "Primary count = %d", iPCount);
|
||||||
@ -56,6 +60,10 @@ static void CheckSurfaceList(SurfaceDB_Type *SurfaceDB)
|
|||||||
sprintf(sMsg, "Backbuffer count = %d", iPCount);
|
sprintf(sMsg, "Backbuffer count = %d", iPCount);
|
||||||
MessageBox(0, sMsg, "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION);
|
MessageBox(0, sMsg, "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION);
|
||||||
}
|
}
|
||||||
|
if(iZCount > 1) {
|
||||||
|
sprintf(sMsg, "Zbuffer count = %d", iZCount);
|
||||||
|
MessageBox(0, sMsg, "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DumpSurfaceList(SurfaceDB_Type *SurfaceDB)
|
static void DumpSurfaceList(SurfaceDB_Type *SurfaceDB)
|
||||||
@ -87,53 +95,33 @@ char *dxwSStack::ExplainSurfaceRole(LPDIRECTDRAWSURFACE ps)
|
|||||||
void dxwSStack::ClearSurfaceList()
|
void dxwSStack::ClearSurfaceList()
|
||||||
{
|
{
|
||||||
#ifdef DXW_SURFACE_STACK_TRACING
|
#ifdef DXW_SURFACE_STACK_TRACING
|
||||||
OutTrace(">>> SURFACELIST CLEAR ALL\n");
|
OutTrace(">>> SURFACELIST CLEAR UNREF\n");
|
||||||
#endif
|
#endif
|
||||||
// v2.03.91.fx5: emptying the list entirely is no good for "Warhammer 40K Rites of War"
|
// v2.03.91.fx5: emptying the list entirely is no good for "Warhammer 40K Rites of War"
|
||||||
// better leave the last used primary and backbuffer surfaces.
|
// better leave the last used primary and backbuffer surfaces.
|
||||||
int i;
|
int i, j;
|
||||||
SurfaceDB_Type LastEntries[3];
|
SurfaceDB_Type NewEntries[DDSQLEN];
|
||||||
LastEntries[0].lpdds = 0;
|
|
||||||
LastEntries[1].lpdds = 0;
|
|
||||||
LastEntries[2].lpdds = 0;
|
|
||||||
lpDDSPrimary = NULL;
|
lpDDSPrimary = NULL;
|
||||||
lpDDSBackBuffer = NULL;
|
lpDDSBackBuffer = NULL;
|
||||||
lpDDSZBuffer = NULL;
|
lpDDSZBuffer = NULL;
|
||||||
// search for last (more recent) entries and copy to safe place
|
lpDDS3DRef = NULL;
|
||||||
for (i=0;i<DDSQLEN;i++) {
|
// search for valid entries and copy to safe place
|
||||||
|
for (i=0, j=0; i<DDSQLEN; i++) {
|
||||||
if(SurfaceDB[i].lpdds == NULL) break;
|
if(SurfaceDB[i].lpdds == NULL) break;
|
||||||
LastEntries[SurfaceDB[i].uRole]=SurfaceDB[i];
|
if(SurfaceDB[i].uRef) NewEntries[j++]=SurfaceDB[i];
|
||||||
}
|
}
|
||||||
// clear all
|
NewEntries[j].lpdds = NULL; // terminator
|
||||||
for (i=0;i<DDSQLEN;i++) {
|
// move back to original list
|
||||||
SurfaceDB[i].lpdds = NULL;
|
for (i=0; i<DDSQLEN; i++) {
|
||||||
SurfaceDB[i].uRef = FALSE;
|
if(NewEntries[i].lpdds == NULL) break;
|
||||||
SurfaceDB[i].uRole = 0;
|
SurfaceDB[i]=NewEntries[i];
|
||||||
SurfaceDB[i].uVersion = 0;
|
switch(SurfaceDB[i].uRole){
|
||||||
}
|
case SURFACE_ROLE_PRIMARY: lpDDSPrimary = SurfaceDB[i].lpdds; break;
|
||||||
// bring back the valid entries to db
|
case SURFACE_ROLE_BACKBUFFER: lpDDSBackBuffer = SurfaceDB[i].lpdds; break;
|
||||||
i = 0;
|
case SURFACE_ROLE_ZBUFFER: lpDDSZBuffer = SurfaceDB[i].lpdds; break;
|
||||||
if(LastEntries[0].lpdds) {
|
}
|
||||||
SurfaceDB[i++]=LastEntries[0];
|
|
||||||
lpDDSPrimary = LastEntries[0].lpdds;
|
|
||||||
#ifdef DXW_SURFACE_STACK_TRACING
|
|
||||||
OutTrace(">>> SAVED lpDDSPrimary=%x\n", lpDDSPrimary);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if(LastEntries[1].lpdds) {
|
|
||||||
SurfaceDB[i++]=LastEntries[1];
|
|
||||||
lpDDSBackBuffer = LastEntries[1].lpdds;
|
|
||||||
#ifdef DXW_SURFACE_STACK_TRACING
|
|
||||||
OutTrace(">>> SAVED lpDDSBackBuffer=%x\n", lpDDSBackBuffer);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if(LastEntries[2].lpdds) {
|
|
||||||
SurfaceDB[i++]=LastEntries[2];
|
|
||||||
lpDDSZBuffer = LastEntries[2].lpdds;
|
|
||||||
#ifdef DXW_SURFACE_STACK_TRACING
|
|
||||||
OutTrace(">>> SAVED lpDDSZBuffer=%x\n", lpDDSZBuffer);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
SurfaceDB[i].lpdds = 0; // terminator
|
||||||
#ifdef DXW_SURFACE_STACK_TRACING
|
#ifdef DXW_SURFACE_STACK_TRACING
|
||||||
DumpSurfaceList(SurfaceDB);
|
DumpSurfaceList(SurfaceDB);
|
||||||
#endif
|
#endif
|
||||||
@ -204,30 +192,49 @@ void dxwSStack::PushZBufferSurface(LPDIRECTDRAWSURFACE ps, int version, DWORD dw
|
|||||||
PushSurface(ps, SURFACE_ROLE_ZBUFFER, (USHORT)version, dwCaps);
|
PushSurface(ps, SURFACE_ROLE_ZBUFFER, (USHORT)version, dwCaps);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dxwSStack::DuplicateSurface(LPDIRECTDRAWSURFACE psfrom, LPDIRECTDRAWSURFACE psto, int version)
|
void dxwSStack::Push3DRefSurface(LPDIRECTDRAWSURFACE ps, int version, DWORD dwCaps)
|
||||||
{
|
{
|
||||||
int i, j;
|
PushSurface(ps, SURFACE_ROLE_3DREF, (USHORT)version, dwCaps);
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dxwSStack::DuplicateSurface(LPDIRECTDRAWSURFACE psfrom, LPDIRECTDRAWSURFACE psto, int version)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
SurfaceDB_Type *e;
|
SurfaceDB_Type *e;
|
||||||
|
SurfaceDB_Type sentry;
|
||||||
#ifdef DXW_SURFACE_STACK_TRACING
|
#ifdef DXW_SURFACE_STACK_TRACING
|
||||||
OutTraceSDB(">>> SURFACELIST DUPL: from=%x to=%x vers=%d\n", psfrom, psto, version);
|
OutTraceSDB(">>> SURFACELIST DUPL: from=%x to=%x vers=%d\n", psfrom, psto, version);
|
||||||
#endif
|
#endif
|
||||||
|
// search for source or empty slot
|
||||||
for (i=0;i<DDSQLEN;i++) {
|
for (i=0;i<DDSQLEN;i++) {
|
||||||
e=&SurfaceDB[i];
|
e=&SurfaceDB[i];
|
||||||
if ((e->lpdds==psfrom) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list
|
if ((e->lpdds==psfrom) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list
|
||||||
}
|
}
|
||||||
// if not found, return
|
// if not found, return
|
||||||
if (!e->lpdds) return;
|
if (!e->lpdds) return 0;
|
||||||
// search for an empty slot
|
// save surface entry
|
||||||
j = i;
|
sentry = *e;
|
||||||
for (j=0;j<DDSQLEN;j++) if (!SurfaceDB[j].lpdds) break;
|
// search for destination or empty slot
|
||||||
|
for (i=0;i<DDSQLEN;i++) {
|
||||||
|
e=&SurfaceDB[i];
|
||||||
|
if ((e->lpdds==psto) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list
|
||||||
|
}
|
||||||
|
if(i == DDSQLEN) {
|
||||||
|
//MessageBox(0, "Surface stack is full", "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION);
|
||||||
|
//return;
|
||||||
|
for(int j=0;j<DDSQLEN-1;j++) SurfaceDB[j]=SurfaceDB[j+1]; // scale down the whole stack one entry
|
||||||
|
e=&SurfaceDB[DDSQLEN-1];
|
||||||
|
}
|
||||||
// duplicate the entry with the new lpdds and version but old role / capabilities
|
// duplicate the entry with the new lpdds and version but old role / capabilities
|
||||||
SurfaceDB[j] = SurfaceDB[i];
|
// either overriding the old entry or writing a new one
|
||||||
SurfaceDB[j].lpdds = psto;
|
*e = sentry;
|
||||||
SurfaceDB[j].uVersion = version;
|
e->lpdds = psto;
|
||||||
|
e->uVersion = version;
|
||||||
|
e->uRef = TRUE;
|
||||||
#ifdef DXW_SURFACE_STACK_TRACING
|
#ifdef DXW_SURFACE_STACK_TRACING
|
||||||
DumpSurfaceList(SurfaceDB);
|
DumpSurfaceList(SurfaceDB);
|
||||||
#endif
|
#endif
|
||||||
|
return e->dwCaps;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dxwSStack::PopSurface(LPDIRECTDRAWSURFACE ps)
|
void dxwSStack::PopSurface(LPDIRECTDRAWSURFACE ps)
|
||||||
@ -302,6 +309,18 @@ BOOL dxwSStack::IsAZBufferSurface(LPDIRECTDRAWSURFACE ps)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL dxwSStack::IsA3DRefSurface(LPDIRECTDRAWSURFACE ps)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
// treat NULL surface ptr as a non primary
|
||||||
|
if(!ps) return FALSE;
|
||||||
|
for (i=0;i<DDSQLEN;i++) {
|
||||||
|
if (SurfaceDB[i].lpdds==0) return FALSE;
|
||||||
|
if (SurfaceDB[i].lpdds==ps) return (SurfaceDB[i].uRole == SURFACE_ROLE_3DREF);
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
LPDIRECTDRAWSURFACE dxwSStack::GetSurfaceByRole(USHORT role)
|
LPDIRECTDRAWSURFACE dxwSStack::GetSurfaceByRole(USHORT role)
|
||||||
{
|
{
|
||||||
// Get a surface marked for the desired role (either PRIMARY or BACKBUFFER) and
|
// Get a surface marked for the desired role (either PRIMARY or BACKBUFFER) and
|
||||||
@ -351,3 +370,17 @@ DWORD dxwSStack::GetCaps(LPDIRECTDRAWSURFACE ps)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SurfaceDB_Type *dxwSStack::GetSurface(LPDIRECTDRAWSURFACE ps)
|
||||||
|
{
|
||||||
|
for (int i=0;i<DDSQLEN;i++) {
|
||||||
|
if (SurfaceDB[i].lpdds==0) return NULL;
|
||||||
|
if (SurfaceDB[i].lpdds==ps) {
|
||||||
|
#ifdef DXW_SURFACE_STACK_TRACING
|
||||||
|
OutTraceSDB(">>> GETCAPS: lpdds=%x caps=%x(%s)\n", ps, SurfaceDB[i].dwCaps, ExplainDDSCaps(SurfaceDB[i].dwCaps));
|
||||||
|
#endif
|
||||||
|
return &SurfaceDB[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
@ -44,6 +44,7 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte
|
|||||||
int iObjectType;
|
int iObjectType;
|
||||||
int iObjectVersion;
|
int iObjectVersion;
|
||||||
extern LPDIRECTDRAWSURFACE lpDDSEmu_Prim;
|
extern LPDIRECTDRAWSURFACE lpDDSEmu_Prim;
|
||||||
|
DWORD caps;
|
||||||
|
|
||||||
IsPrim=dxwss.IsAPrimarySurface((LPDIRECTDRAWSURFACE)lpdds);
|
IsPrim=dxwss.IsAPrimarySurface((LPDIRECTDRAWSURFACE)lpdds);
|
||||||
IsBack=dxwss.IsABackBufferSurface((LPDIRECTDRAWSURFACE)lpdds);
|
IsBack=dxwss.IsABackBufferSurface((LPDIRECTDRAWSURFACE)lpdds);
|
||||||
@ -203,16 +204,18 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte
|
|||||||
|
|
||||||
switch(iObjectType){
|
switch(iObjectType){
|
||||||
case TYPE_OBJECT_UNKNOWN:
|
case TYPE_OBJECT_UNKNOWN:
|
||||||
if(*obp != lpdds) dxwss.PopSurface((LPDIRECTDRAWSURFACE)*obp); // clear any past attribution
|
if(caps=dxwss.DuplicateSurface((LPDIRECTDRAWSURFACE)lpdds, (LPDIRECTDRAWSURFACE)*obp, iObjectVersion)){
|
||||||
dxwss.DuplicateSurface((LPDIRECTDRAWSURFACE)lpdds, (LPDIRECTDRAWSURFACE)*obp, iObjectVersion);
|
OutTraceDW("QueryInterface: MOVE caps=%x(%s)\n", caps, ExplainDDSCaps(caps));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case TYPE_OBJECT_DIRECTDRAW:
|
case TYPE_OBJECT_DIRECTDRAW:
|
||||||
HookDDSession((LPDIRECTDRAW *)obp, iObjectVersion);
|
HookDDSession((LPDIRECTDRAW *)obp, iObjectVersion);
|
||||||
break;
|
break;
|
||||||
case TYPE_OBJECT_DDRAWSURFACE:
|
case TYPE_OBJECT_DDRAWSURFACE:
|
||||||
dxw.dwDDVersion=iObjectVersion;
|
dxw.dwDDVersion=iObjectVersion;
|
||||||
if(*obp != lpdds) dxwss.PopSurface((LPDIRECTDRAWSURFACE)*obp); // clear any past attribution
|
if(caps=dxwss.DuplicateSurface((LPDIRECTDRAWSURFACE)lpdds, (LPDIRECTDRAWSURFACE)*obp, iObjectVersion)){
|
||||||
dxwss.DuplicateSurface((LPDIRECTDRAWSURFACE)lpdds, (LPDIRECTDRAWSURFACE)*obp, iObjectVersion);
|
OutTraceDW("QueryInterface: MOVE caps=%x(%s)\n", caps, ExplainDDSCaps(caps));
|
||||||
|
}
|
||||||
if(IsPrim){
|
if(IsPrim){
|
||||||
OutTraceDW("QueryInterface(S): primary=%x new=%x\n", lpdds, *obp);
|
OutTraceDW("QueryInterface(S): primary=%x new=%x\n", lpdds, *obp);
|
||||||
HookDDSurface((LPDIRECTDRAWSURFACE *)obp, dxw.dwDDVersion, TRUE);
|
HookDDSurface((LPDIRECTDRAWSURFACE *)obp, dxw.dwDDVersion, TRUE);
|
||||||
|
@ -16,6 +16,13 @@
|
|||||||
#include <Winuser.h>
|
#include <Winuser.h>
|
||||||
|
|
||||||
#define FIXCHILDSIZE FALSE
|
#define FIXCHILDSIZE FALSE
|
||||||
|
//#define TRANSLATEMESSAGEHOOK
|
||||||
|
|
||||||
|
#ifdef TRANSLATEMESSAGEHOOK
|
||||||
|
typedef BOOL (WINAPI *TranslateMessage_Type)(MSG *);
|
||||||
|
BOOL WINAPI extTranslateMessage(MSG *);
|
||||||
|
TranslateMessage_Type pTranslateMessage;
|
||||||
|
#endif
|
||||||
|
|
||||||
#define _Warn(s) MessageBox(0, s, "to do", MB_ICONEXCLAMATION)
|
#define _Warn(s) MessageBox(0, s, "to do", MB_ICONEXCLAMATION)
|
||||||
|
|
||||||
@ -43,9 +50,9 @@ UINT WINAPI extSetDIBColorTable(HDC, UINT, UINT, const RGBQUAD *);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static HookEntryEx_Type Hooks[]={
|
static HookEntryEx_Type Hooks[]={
|
||||||
|
#ifdef TRANSLATEMESSAGEHOOK
|
||||||
//{HOOK_IAT_CANDIDATE, 0, "TranslateMessage", (FARPROC)TranslateMessage, (FARPROC *)&pTranslateMessage, (FARPROC)extTranslateMessage},
|
{HOOK_IAT_CANDIDATE, 0, "TranslateMessage", (FARPROC)TranslateMessage, (FARPROC *)&pTranslateMessage, (FARPROC)extTranslateMessage},
|
||||||
|
#endif
|
||||||
{HOOK_IAT_CANDIDATE, 0, "UpdateWindow", (FARPROC)UpdateWindow, (FARPROC *)&pUpdateWindow, (FARPROC)extUpdateWindow}, // v2.04.04: needed for "Hide Desktop" option
|
{HOOK_IAT_CANDIDATE, 0, "UpdateWindow", (FARPROC)UpdateWindow, (FARPROC *)&pUpdateWindow, (FARPROC)extUpdateWindow}, // v2.04.04: needed for "Hide Desktop" option
|
||||||
//{HOOK_IAT_CANDIDATE, 0, "GetWindowPlacement", (FARPROC)NULL, (FARPROC *)&pGetWindowPlacement, (FARPROC)extGetWindowPlacement},
|
//{HOOK_IAT_CANDIDATE, 0, "GetWindowPlacement", (FARPROC)NULL, (FARPROC *)&pGetWindowPlacement, (FARPROC)extGetWindowPlacement},
|
||||||
//{HOOK_IAT_CANDIDATE, 0, "SetWindowPlacement", (FARPROC)NULL, (FARPROC *)&pSetWindowPlacement, (FARPROC)extSetWindowPlacement},
|
//{HOOK_IAT_CANDIDATE, 0, "SetWindowPlacement", (FARPROC)NULL, (FARPROC *)&pSetWindowPlacement, (FARPROC)extSetWindowPlacement},
|
||||||
@ -801,6 +808,15 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong, SetWindowLon
|
|||||||
dwNewLong &= ~WS_CLIPSIBLINGS;
|
dwNewLong &= ~WS_CLIPSIBLINGS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dxw.dwFlags1 & FIXTHINFRAME){
|
||||||
|
//if((nIndex==GWL_STYLE) && !(dwNewLong & WS_CHILD)){
|
||||||
|
if((nIndex==GWL_STYLE) && !(dwNewLong & WS_CHILD) && dxw.IsDesktop(hwnd)){
|
||||||
|
OutTraceDW("SetWindowLong: GWL_STYLE %x force OVERLAPPEDWINDOW\n", dwNewLong);
|
||||||
|
dwNewLong |= WS_OVERLAPPEDTHIN;
|
||||||
|
dwNewLong &= ~WS_CLIPSIBLINGS;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// v2.03.94.fx2: removed dxw.IsFullScreen() check here ... WinProc routine must be verified in all conditions
|
// v2.03.94.fx2: removed dxw.IsFullScreen() check here ... WinProc routine must be verified in all conditions
|
||||||
@ -3664,6 +3680,7 @@ LRESULT CALLBACK extMouseHookProc(int code, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
HOOKPROC glpMessageHookProcessFunction;
|
HOOKPROC glpMessageHookProcessFunction;
|
||||||
HOOKPROC glpMouseHookProcessFunction;
|
HOOKPROC glpMouseHookProcessFunction;
|
||||||
|
HOOKPROC glpMouseHookProcessFunctionLL;
|
||||||
|
|
||||||
LRESULT CALLBACK extMessageHookProc(int code, WPARAM wParam, LPARAM lParam)
|
LRESULT CALLBACK extMessageHookProc(int code, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
@ -3682,17 +3699,48 @@ LRESULT CALLBACK extMessageHookProc(int code, WPARAM wParam, LPARAM lParam)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static POINT FixMousePoint(POINT pt)
|
||||||
|
{
|
||||||
|
dxw.UnmapWindow(&pt);
|
||||||
|
if(pt.x < 0) pt.x = 0;
|
||||||
|
if(pt.x >= (LONG)dxw.GetScreenWidth()) pt.x = dxw.GetScreenWidth()-1;
|
||||||
|
if(pt.y < 0) pt.y = 0;
|
||||||
|
if(pt.y >= (LONG)dxw.GetScreenHeight()) pt.y = dxw.GetScreenHeight()-1;
|
||||||
|
return pt;
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT CALLBACK extMouseHookProc(int code, WPARAM wParam, LPARAM lParam)
|
LRESULT CALLBACK extMouseHookProc(int code, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
LRESULT ret;
|
|
||||||
OutTraceC("MouseHookProc: code=%x wParam=%x lParam=%x\n", code, wParam, lParam);
|
OutTraceC("MouseHookProc: code=%x wParam=%x lParam=%x\n", code, wParam, lParam);
|
||||||
MOUSEHOOKSTRUCT *pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
|
if(code < 0) return CallNextHookEx(0, code, wParam, lParam);
|
||||||
if (pMouseStruct != NULL){
|
|
||||||
OutTraceC("MouseHookProc: event=%s pos=(%d,%d)\n", ExplainWinMessage(wParam), pMouseStruct->pt.x, pMouseStruct->pt.y);
|
if(lParam){
|
||||||
extGetCursorPos(&(pMouseStruct->pt));
|
MOUSEHOOKSTRUCT MouseStruct = *(MOUSEHOOKSTRUCT *)lParam;
|
||||||
}
|
MouseStruct.pt = FixMousePoint(MouseStruct.pt);
|
||||||
ret = (*glpMouseHookProcessFunction)(code, wParam, lParam);
|
OutTraceC("MouseHookProc: event=%s pos=(%d,%d)->(%d,%d)\n",
|
||||||
return ret;
|
ExplainWinMessage(wParam),
|
||||||
|
((MOUSEHOOKSTRUCT *)lParam)->pt.x, ((MOUSEHOOKSTRUCT *)lParam)->pt.y,
|
||||||
|
MouseStruct.pt.x, MouseStruct.pt.y);
|
||||||
|
return (*glpMouseHookProcessFunction)(code, wParam, (LPARAM)&MouseStruct);
|
||||||
|
}
|
||||||
|
return (*glpMouseHookProcessFunction)(code, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT CALLBACK extMouseHookProcLL(int code, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
OutTraceC("MouseHookProcLL: code=%x wParam=%x lParam=%x\n", code, wParam, lParam);
|
||||||
|
if(code < 0) return CallNextHookEx(0, code, wParam, lParam);
|
||||||
|
|
||||||
|
if(lParam){
|
||||||
|
MSLLHOOKSTRUCT MouseStruct = *(MSLLHOOKSTRUCT *)lParam;
|
||||||
|
MouseStruct.pt = FixMousePoint(MouseStruct.pt);
|
||||||
|
OutTraceC("MouseHookProcLL: event=%s pos=(%d,%d)->(%d,%d)\n",
|
||||||
|
ExplainWinMessage(wParam),
|
||||||
|
((MSLLHOOKSTRUCT *)lParam)->pt.x, ((MSLLHOOKSTRUCT *)lParam)->pt.y,
|
||||||
|
MouseStruct.pt.x, MouseStruct.pt.y);
|
||||||
|
return (*glpMouseHookProcessFunctionLL)(code, wParam, (LPARAM)&MouseStruct);
|
||||||
|
}
|
||||||
|
return (*glpMouseHookProcessFunctionLL)(code, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HHOOK WINAPI extSetWindowsHookEx(SetWindowsHookEx_Type pSetWindowsHookEx, int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId)
|
static HHOOK WINAPI extSetWindowsHookEx(SetWindowsHookEx_Type pSetWindowsHookEx, int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId)
|
||||||
@ -3709,6 +3757,7 @@ static HHOOK WINAPI extSetWindowsHookEx(SetWindowsHookEx_Type pSetWindowsHookEx,
|
|||||||
lpfn=extMessageHookProc;
|
lpfn=extMessageHookProc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// v2.03.39: "One Must Fall Battlegrounds" keyboard fix
|
// v2.03.39: "One Must Fall Battlegrounds" keyboard fix
|
||||||
if((idHook == WH_KEYBOARD) && (dwThreadId == NULL)) {
|
if((idHook == WH_KEYBOARD) && (dwThreadId == NULL)) {
|
||||||
dwThreadId = GetCurrentThreadId();
|
dwThreadId = GetCurrentThreadId();
|
||||||
@ -3727,10 +3776,17 @@ static HHOOK WINAPI extSetWindowsHookEx(SetWindowsHookEx_Type pSetWindowsHookEx,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((dxw.dwFlags8 & FIXMOUSEHOOK) && (idHook == WH_MOUSE)){
|
if(dxw.dwFlags8 & FIXMOUSEHOOK){
|
||||||
OutTraceDW("SetWindowsHookEx: FIXMOUSEHOOK filter active\n");
|
if(idHook == WH_MOUSE){
|
||||||
glpMouseHookProcessFunction = lpfn;
|
OutTraceDW("SetWindowsHookEx: FIXMOUSEHOOK filter active on WH_MOUSE\n");
|
||||||
lpfn=extMouseHookProc;
|
glpMouseHookProcessFunction = lpfn;
|
||||||
|
lpfn=extMouseHookProc;
|
||||||
|
}
|
||||||
|
if (idHook == WH_MOUSE_LL){
|
||||||
|
OutTraceDW("SetWindowsHookEx: FIXMOUSEHOOK filter active on WH_MOUSE_LL\n");
|
||||||
|
glpMouseHookProcessFunctionLL = lpfn;
|
||||||
|
lpfn=extMouseHookProcLL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret=(*pSetWindowsHookEx)(idHook, lpfn, hMod, dwThreadId);
|
ret=(*pSetWindowsHookEx)(idHook, lpfn, hMod, dwThreadId);
|
||||||
@ -4053,7 +4109,7 @@ BOOL WINAPI extDrawMenuBar(HWND hWnd)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#ifdef TRANSLATEMESSAGEHOOK
|
||||||
BOOL WINAPI extTranslateMessage(MSG *pMsg)
|
BOOL WINAPI extTranslateMessage(MSG *pMsg)
|
||||||
{
|
{
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
@ -4063,8 +4119,8 @@ BOOL WINAPI extTranslateMessage(MSG *pMsg)
|
|||||||
pMsg->pt=dxw.ScreenToClient(pMsg->pt);
|
pMsg->pt=dxw.ScreenToClient(pMsg->pt);
|
||||||
pMsg->pt=dxw.FixCursorPos(pMsg->pt);
|
pMsg->pt=dxw.FixCursorPos(pMsg->pt);
|
||||||
|
|
||||||
pMsg->pt.x *= 4;
|
//pMsg->pt.x *= 4;
|
||||||
pMsg->pt.y *= 4;
|
//pMsg->pt.y *= 4;
|
||||||
//if((pMsg->message <= WM_MOUSELAST) && (pMsg->message >= WM_MOUSEFIRST))
|
//if((pMsg->message <= WM_MOUSELAST) && (pMsg->message >= WM_MOUSEFIRST))
|
||||||
// pMsg->lParam = MAKELPARAM(pMsg->pt.x, pMsg->pt.y);
|
// pMsg->lParam = MAKELPARAM(pMsg->pt.x, pMsg->pt.y);
|
||||||
OutTraceDW("TranslateMessage: new pos=(%d,%d)\n", pMsg->pt.x, pMsg->pt.y);
|
OutTraceDW("TranslateMessage: new pos=(%d,%d)\n", pMsg->pt.x, pMsg->pt.y);
|
||||||
|
@ -279,6 +279,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
|
|
||||||
if(dxw.dwFlags3 & (FILTERMESSAGES|DEFAULTMESSAGES)){
|
if(dxw.dwFlags3 & (FILTERMESSAGES|DEFAULTMESSAGES)){
|
||||||
switch(message){
|
switch(message){
|
||||||
|
case WM_NCMOUSELEAVE:
|
||||||
case WM_NCMOUSEMOVE:
|
case WM_NCMOUSEMOVE:
|
||||||
case WM_NCLBUTTONDOWN:
|
case WM_NCLBUTTONDOWN:
|
||||||
case WM_NCLBUTTONUP:
|
case WM_NCLBUTTONUP:
|
||||||
|
@ -6,12 +6,13 @@
|
|||||||
#include "ShimsDialog.h"
|
#include "ShimsDialog.h"
|
||||||
|
|
||||||
// http://msdn2.microsoft.com/en-us/library/bb432457
|
// http://msdn2.microsoft.com/en-us/library/bb432457
|
||||||
// PDB WINAPI SdbOpenDatabase(
|
// HSDB WINAPI SdbOpenDatabase(
|
||||||
// LPCTSTR pwszPath,
|
// LPCTSTR pwszPath,
|
||||||
// PATH_TYPE eType
|
// PATH_TYPE eType
|
||||||
//);
|
//);
|
||||||
// What is PDB!? Assuming it is a pointer to somewhere => "void*"
|
|
||||||
typedef void* PDB;
|
// What is HSDB!? Assuming it is a pointer to somewhere => "void*"
|
||||||
|
typedef void* HSDB;
|
||||||
|
|
||||||
// http://msdn2.microsoft.com/en-us/library/bb432389.aspx
|
// http://msdn2.microsoft.com/en-us/library/bb432389.aspx
|
||||||
typedef enum _PATH_TYPE
|
typedef enum _PATH_TYPE
|
||||||
@ -61,6 +62,14 @@ typedef DWORD TAGREF;
|
|||||||
#define TAG_APP_ID (0x11 | TAG_TYPE_BINARY)
|
#define TAG_APP_ID (0x11 | TAG_TYPE_BINARY)
|
||||||
#define CONTEXT_PLATFORM_ID (0x8 | TAG_TYPE_BINARY)
|
#define CONTEXT_PLATFORM_ID (0x8 | TAG_TYPE_BINARY)
|
||||||
|
|
||||||
|
#define HID_DOS_PATHS 0x00000001
|
||||||
|
#define HID_DATABASE_FULLPATH 0x00000002
|
||||||
|
#define HID_NO_DATABASE 0x00000004
|
||||||
|
#define HID_DATABASE_TYPE_MASK 0xF00F0000
|
||||||
|
|
||||||
|
#define SDB_DATABASE_MAIN_SHIM 0x80030000
|
||||||
|
#define SDB_DATABASE_MAIN_MSI 0x80020000
|
||||||
|
#define SDB_DATABASE_MAIN_DRIVERS 0x80040000
|
||||||
|
|
||||||
typedef struct TAG_RC_Entry
|
typedef struct TAG_RC_Entry
|
||||||
{
|
{
|
||||||
@ -91,44 +100,55 @@ static DWORD s_TagGuids[] =
|
|||||||
// APIs:
|
// APIs:
|
||||||
|
|
||||||
// http://msdn.microsoft.com/en-us/library/bb432457.aspx
|
// http://msdn.microsoft.com/en-us/library/bb432457.aspx
|
||||||
//PDB WINAPI SdbOpenDatabase(
|
//HSDB WINAPI SdbOpenDatabase(
|
||||||
// __in LPCTSTR pwszPath,
|
// __in LPCTSTR pwszPath,
|
||||||
// __in PATH_TYPE eType
|
// __in PATH_TYPE eType
|
||||||
//);
|
//);
|
||||||
typedef PDB (WINAPI *PSdbOpenDatabase)(
|
typedef HSDB (WINAPI *PSdbOpenDatabase)(
|
||||||
LPCWSTR pwszPath, // Docu wrong? LPCTSTR shouldn't it be LPCWSTR!?
|
LPCTSTR pwszPath, // Docu wrong? LPCTSTR shouldn't it be LPCWSTR!?
|
||||||
PATH_TYPE eType
|
PATH_TYPE eType
|
||||||
);
|
);
|
||||||
PSdbOpenDatabase pSdbOpenDatabase = NULL;
|
PSdbOpenDatabase pSdbOpenDatabase = NULL;
|
||||||
|
|
||||||
|
// http://msdn.microsoft.com/en-us/library/bb432452.aspx
|
||||||
|
//HSDB WINAPI SdbInitDatabase(
|
||||||
|
// __in DWORD dwFlags,
|
||||||
|
// __in LPCTSTR pszDatabasePath
|
||||||
|
//);
|
||||||
|
typedef HSDB (WINAPI *PSdbInitDatabase)(
|
||||||
|
DWORD dwFlags,
|
||||||
|
LPCTSTR pszDatabasePath
|
||||||
|
);
|
||||||
|
PSdbInitDatabase pSdbInitDatabase = NULL;
|
||||||
|
|
||||||
// http://msdn.microsoft.com/en-us/library/cc895520
|
// http://msdn.microsoft.com/en-us/library/cc895520
|
||||||
//void WINAPI SdbCloseDatabase(
|
//void WINAPI SdbCloseDatabase(
|
||||||
// __inout PDB pdb
|
// __inout HSDB pdb
|
||||||
//);
|
//);
|
||||||
typedef VOID (WINAPI *PSdbCloseDatabase)(
|
typedef VOID (WINAPI *PSdbCloseDatabase)(
|
||||||
PDB handle // assuming the passed handle...
|
HSDB handle // assuming the passed handle...
|
||||||
);
|
);
|
||||||
PSdbCloseDatabase pSdbCloseDatabase = NULL;
|
PSdbCloseDatabase pSdbCloseDatabase = NULL;
|
||||||
|
|
||||||
// http://msdn2.microsoft.com/en-us/library/bb432446
|
// http://msdn2.microsoft.com/en-us/library/bb432446
|
||||||
//TAGID WINAPI SdbGetFirstChild(
|
//TAGID WINAPI SdbGetFirstChild(
|
||||||
// PDB pdb,
|
// HSDB pdb,
|
||||||
// TAGID tiParent
|
// TAGID tiParent
|
||||||
//);
|
//);
|
||||||
typedef TAGID (WINAPI *PSdbGetFirstChild)(
|
typedef TAGID (WINAPI *PSdbGetFirstChild)(
|
||||||
PDB pdb,
|
HSDB pdb,
|
||||||
TAGID tiParent
|
TAGID tiParent
|
||||||
);
|
);
|
||||||
PSdbGetFirstChild pSdbGetFirstChild = NULL;
|
PSdbGetFirstChild pSdbGetFirstChild = NULL;
|
||||||
|
|
||||||
// http://msdn2.microsoft.com/en-us/library/bb432449
|
// http://msdn2.microsoft.com/en-us/library/bb432449
|
||||||
//TAGID WINAPI SdbGetNextChild(
|
//TAGID WINAPI SdbGetNextChild(
|
||||||
// PDB pdb,
|
// HSDB pdb,
|
||||||
// TAGID tiParent,
|
// TAGID tiParent,
|
||||||
// TAGID tiPrev
|
// TAGID tiPrev
|
||||||
//);
|
//);
|
||||||
typedef TAGID (WINAPI *PSdbGetNextChild)(
|
typedef TAGID (WINAPI *PSdbGetNextChild)(
|
||||||
PDB pdb,
|
HSDB pdb,
|
||||||
TAGID tiParent,
|
TAGID tiParent,
|
||||||
TAGID tiPrev
|
TAGID tiPrev
|
||||||
);
|
);
|
||||||
@ -136,11 +156,11 @@ PSdbGetNextChild pSdbGetNextChild = NULL;
|
|||||||
|
|
||||||
// http://msdn2.microsoft.com/en-us/library/bb432451
|
// http://msdn2.microsoft.com/en-us/library/bb432451
|
||||||
//TAG WINAPI SdbGetTagFromTagID(
|
//TAG WINAPI SdbGetTagFromTagID(
|
||||||
// PDB pdb,
|
// HSDB pdb,
|
||||||
// TAGID tiWhich
|
// TAGID tiWhich
|
||||||
//);
|
//);
|
||||||
typedef TAG (WINAPI *PSdbGetTagFromTagID)(
|
typedef TAG (WINAPI *PSdbGetTagFromTagID)(
|
||||||
PDB pdb,
|
HSDB pdb,
|
||||||
TAGID tiWhich
|
TAGID tiWhich
|
||||||
);
|
);
|
||||||
PSdbGetTagFromTagID pSdbGetTagFromTagID = NULL;
|
PSdbGetTagFromTagID pSdbGetTagFromTagID = NULL;
|
||||||
@ -156,13 +176,13 @@ PSdbTagToString pSdbTagToString = NULL;
|
|||||||
|
|
||||||
// http://msdn2.microsoft.com/en-us/library/bb432464
|
// http://msdn2.microsoft.com/en-us/library/bb432464
|
||||||
//BOOL WINAPI SdbReadStringTag(
|
//BOOL WINAPI SdbReadStringTag(
|
||||||
// PDB pdb,
|
// HSDB pdb,
|
||||||
// TAGID tiWhich,
|
// TAGID tiWhich,
|
||||||
// LPTSTR pwszBuffer,
|
// LPTSTR pwszBuffer,
|
||||||
// DWORD cchBufferSize
|
// DWORD cchBufferSize
|
||||||
//);
|
//);
|
||||||
typedef BOOL (WINAPI *PSdbReadStringTag)(
|
typedef BOOL (WINAPI *PSdbReadStringTag)(
|
||||||
PDB pdb,
|
HSDB pdb,
|
||||||
TAGID tiWhich,
|
TAGID tiWhich,
|
||||||
LPTSTR pwszBuffer,
|
LPTSTR pwszBuffer,
|
||||||
DWORD cchBufferSize
|
DWORD cchBufferSize
|
||||||
@ -171,23 +191,23 @@ PSdbReadStringTag pSdbReadStringTag = NULL;
|
|||||||
|
|
||||||
// http://msdn2.microsoft.com/en-us/library/bb432450.aspx
|
// http://msdn2.microsoft.com/en-us/library/bb432450.aspx
|
||||||
//LPWSTR WINAPI SdbGetStringTagPtr(
|
//LPWSTR WINAPI SdbGetStringTagPtr(
|
||||||
// PDB pdb,
|
// HSDB pdb,
|
||||||
// TAGID tiWhich
|
// TAGID tiWhich
|
||||||
//);
|
//);
|
||||||
typedef LPWSTR (WINAPI *PSdbGetStringTagPtr)(
|
typedef LPWSTR (WINAPI *PSdbGetStringTagPtr)(
|
||||||
PDB pdb,
|
HSDB pdb,
|
||||||
TAGID tiWhich
|
TAGID tiWhich
|
||||||
);
|
);
|
||||||
PSdbGetStringTagPtr pSdbGetStringTagPtr = NULL;
|
PSdbGetStringTagPtr pSdbGetStringTagPtr = NULL;
|
||||||
|
|
||||||
// http://msdn2.microsoft.com/en-us/library/bb432462.aspx
|
// http://msdn2.microsoft.com/en-us/library/bb432462.aspx
|
||||||
//DWORD WINAPI SdbReadDWORDTag(
|
//DWORD WINAPI SdbReadDWORDTag(
|
||||||
// PDB pdb,
|
// HSDB pdb,
|
||||||
// TAGID tiWhich,
|
// TAGID tiWhich,
|
||||||
// DWORD dwDefault
|
// DWORD dwDefault
|
||||||
//);
|
//);
|
||||||
typedef DWORD (WINAPI *PSdbReadDWORDTag)(
|
typedef DWORD (WINAPI *PSdbReadDWORDTag)(
|
||||||
PDB pdb,
|
HSDB pdb,
|
||||||
TAGID tiWhich,
|
TAGID tiWhich,
|
||||||
DWORD dwDefault
|
DWORD dwDefault
|
||||||
);
|
);
|
||||||
@ -195,22 +215,22 @@ PSdbReadDWORDTag pSdbReadDWORDTag = NULL;
|
|||||||
|
|
||||||
// http://msdn2.microsoft.com/en-us/library/bb432463.aspx
|
// http://msdn2.microsoft.com/en-us/library/bb432463.aspx
|
||||||
//ULONGLONG WINAPI SdbReadQWORDTag(
|
//ULONGLONG WINAPI SdbReadQWORDTag(
|
||||||
// PDB pdb,
|
// HSDB pdb,
|
||||||
// TAGID tiWhich,
|
// TAGID tiWhich,
|
||||||
// ULONGLONG qwDefault
|
// ULONGLONG qwDefault
|
||||||
//);
|
//);
|
||||||
typedef ULONGLONG (WINAPI *PSdbReadQWORDTag)(
|
typedef ULONGLONG (WINAPI *PSdbReadQWORDTag)(
|
||||||
PDB pdb,
|
HSDB pdb,
|
||||||
TAGID tiWhich,
|
TAGID tiWhich,
|
||||||
ULONGLONG qwDefault
|
ULONGLONG qwDefault
|
||||||
);
|
);
|
||||||
PSdbReadQWORDTag pSdbReadQWORDTag = NULL;
|
PSdbReadQWORDTag pSdbReadQWORDTag = NULL;
|
||||||
|
|
||||||
// http://msdn2.microsoft.com/en-us/library/bb432455
|
// http://msdn2.microsoft.com/en-us/library/bb432455
|
||||||
//PDB WINAPI SdbOpenApphelpDetailsDatabase(
|
//HSDB WINAPI SdbOpenApphelpDetailsDatabase(
|
||||||
// LPCWSTR pwsDetailsDatabasePath
|
// LPCWSTR pwsDetailsDatabasePath
|
||||||
//);
|
//);
|
||||||
typedef PDB (WINAPI *PSdbOpenApphelpDetailsDatabase)(
|
typedef HSDB (WINAPI *PSdbOpenApphelpDetailsDatabase)(
|
||||||
LPCWSTR pwsDetailsDatabasePath
|
LPCWSTR pwsDetailsDatabasePath
|
||||||
);
|
);
|
||||||
PSdbOpenApphelpDetailsDatabase pSdbOpenApphelpDetailsDatabase = NULL;
|
PSdbOpenApphelpDetailsDatabase pSdbOpenApphelpDetailsDatabase = NULL;
|
||||||
@ -226,22 +246,22 @@ PSdbOpenApphelpResourceFile pSdbOpenApphelpResourceFile = NULL;
|
|||||||
|
|
||||||
// http://msdn.microsoft.com/en-us/library/bb432443
|
// http://msdn.microsoft.com/en-us/library/bb432443
|
||||||
//PVOID WINAPI SdbGetBinaryTagData(
|
//PVOID WINAPI SdbGetBinaryTagData(
|
||||||
// __in PDB pdb,
|
// __in HSDB pdb,
|
||||||
// __in TAGID tiWhich
|
// __in TAGID tiWhich
|
||||||
//);
|
//);
|
||||||
typedef PVOID (WINAPI *PSdbGetBinaryTagData)(
|
typedef PVOID (WINAPI *PSdbGetBinaryTagData)(
|
||||||
PDB pdb,
|
HSDB pdb,
|
||||||
TAGID tiWhich
|
TAGID tiWhich
|
||||||
);
|
);
|
||||||
PSdbGetBinaryTagData pSdbGetBinaryTagData = NULL;
|
PSdbGetBinaryTagData pSdbGetBinaryTagData = NULL;
|
||||||
|
|
||||||
// ???
|
// ???
|
||||||
//DWORD WINAPI SdbGetTagDataSize(
|
//DWORD WINAPI SdbGetTagDataSize(
|
||||||
// __in PDB pdb,
|
// __in HSDB pdb,
|
||||||
// __in TAGID tiWhich
|
// __in TAGID tiWhich
|
||||||
//);
|
//);
|
||||||
typedef DWORD (WINAPI *PSdbGetTagDataSize)(
|
typedef DWORD (WINAPI *PSdbGetTagDataSize)(
|
||||||
PDB pdb,
|
HSDB pdb,
|
||||||
TAGID tiWhich
|
TAGID tiWhich
|
||||||
);
|
);
|
||||||
PSdbGetTagDataSize pSdbGetTagDataSize = NULL;
|
PSdbGetTagDataSize pSdbGetTagDataSize = NULL;
|
||||||
@ -264,8 +284,6 @@ typedef struct tagSDBQUERYRESULT {
|
|||||||
GUID rgGuidDB[SDB_MAX_SDBS];
|
GUID rgGuidDB[SDB_MAX_SDBS];
|
||||||
} SDBQUERYRESULT, *PSDBQUERYRESULT;
|
} SDBQUERYRESULT, *PSDBQUERYRESULT;
|
||||||
|
|
||||||
typedef void* HSDB;
|
|
||||||
|
|
||||||
// http://msdn.microsoft.com/en-us/library/bb432448
|
// http://msdn.microsoft.com/en-us/library/bb432448
|
||||||
typedef BOOL (WINAPI *PSdbGetMatchingExe)(
|
typedef BOOL (WINAPI *PSdbGetMatchingExe)(
|
||||||
HSDB hSDB,
|
HSDB hSDB,
|
||||||
@ -360,10 +378,17 @@ char * MatchExe(char *FileName)
|
|||||||
static char sBuf[10000];
|
static char sBuf[10000];
|
||||||
LPWSTR szFileName = (LPWSTR)malloc((strlen(FileName)+1)*sizeof(WCHAR));
|
LPWSTR szFileName = (LPWSTR)malloc((strlen(FileName)+1)*sizeof(WCHAR));
|
||||||
MultiByteToWideChar(CP_ACP, 0, FileName, -1, szFileName, strlen(FileName));
|
MultiByteToWideChar(CP_ACP, 0, FileName, -1, szFileName, strlen(FileName));
|
||||||
|
BOOL bRet;
|
||||||
|
HSDB hSDB;
|
||||||
|
|
||||||
HINSTANCE hAppHelp = LoadLibrary(_T("apphelp.dll"));
|
HINSTANCE hAppHelp = LoadLibrary(_T("apphelp.dll"));
|
||||||
|
if(!hAppHelp){
|
||||||
|
sprintf(sBuf, "error %d loading apphelp.dll\n", GetLastError());
|
||||||
|
return sBuf;
|
||||||
|
}
|
||||||
|
|
||||||
pSdbOpenDatabase = (PSdbOpenDatabase) GetProcAddress(hAppHelp, "SdbOpenDatabase");
|
pSdbOpenDatabase = (PSdbOpenDatabase) GetProcAddress(hAppHelp, "SdbOpenDatabase");
|
||||||
|
pSdbInitDatabase = (PSdbInitDatabase) GetProcAddress(hAppHelp, "SdbInitDatabase");
|
||||||
pSdbCloseDatabase = (PSdbCloseDatabase) GetProcAddress(hAppHelp, "SdbCloseDatabase");
|
pSdbCloseDatabase = (PSdbCloseDatabase) GetProcAddress(hAppHelp, "SdbCloseDatabase");
|
||||||
pSdbGetFirstChild = (PSdbGetFirstChild) GetProcAddress(hAppHelp, "SdbGetFirstChild");
|
pSdbGetFirstChild = (PSdbGetFirstChild) GetProcAddress(hAppHelp, "SdbGetFirstChild");
|
||||||
pSdbGetNextChild = (PSdbGetNextChild) GetProcAddress(hAppHelp, "SdbGetNextChild");
|
pSdbGetNextChild = (PSdbGetNextChild) GetProcAddress(hAppHelp, "SdbGetNextChild");
|
||||||
@ -384,55 +409,67 @@ char * MatchExe(char *FileName)
|
|||||||
if(pSdbGetMatchingExe == NULL){
|
if(pSdbGetMatchingExe == NULL){
|
||||||
// rough protection: we assume that if this is found, then all fpointers are there.
|
// rough protection: we assume that if this is found, then all fpointers are there.
|
||||||
sprintf(sBuf, "Unsupported Shim DB\n", FileName);
|
sprintf(sBuf, "Unsupported Shim DB\n", FileName);
|
||||||
|
FreeLibrary(hAppHelp);
|
||||||
return sBuf;
|
return sBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL bRet = pSdbGetMatchingExe(NULL, (LPCWSTR)szFileName, NULL, NULL, 0, &result);
|
//hSDB = pSdbInitDatabase(HID_DATABASE_TYPE_MASK|SDB_DATABASE_MAIN_SHIM, NULL);
|
||||||
if (bRet){
|
hSDB = pSdbInitDatabase(SDB_DATABASE_MAIN_SHIM, NULL);
|
||||||
sprintf(sBuf, "Shim found for file: %s\n", FileName);
|
if(!hSDB){
|
||||||
const size_t flagsLen = 1024;
|
sprintf(sBuf, "Can't initialize shims database\n");
|
||||||
char szFlagsStr[flagsLen];
|
return (sBuf);
|
||||||
Flags2String(result.dwFlags, szFlagsStr, flagsLen);
|
|
||||||
sprintf(sBuf, "%sFlags: 0x%x: %s\n", sBuf, result.dwFlags, szFlagsStr);
|
|
||||||
|
|
||||||
if (result.trApphelp != TAGREF_NULL) sprintf(sBuf, "%sAppHelp-Message: 0x%x\n", sBuf, result.trApphelp);
|
|
||||||
|
|
||||||
for(DWORD i=0; i<result.dwExeCount; i++){
|
|
||||||
sprintf(sBuf, "%sExe-Shim: 0x%x, ", sBuf, result.atrExes[i]);
|
|
||||||
Flags2String(result.adwExeFlags[i], szFlagsStr, flagsLen);
|
|
||||||
sprintf(sBuf, "%sFlags: 0x%x: %s\n", sBuf, result.adwExeFlags[i], szFlagsStr);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(DWORD i=0; i<result.dwLayerCount; i++){
|
|
||||||
sprintf(sBuf, "%sLayer-Shim: 0x%x\n", sBuf, result.atrLayers[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
Flags2String(result.dwLayerFlags, szFlagsStr, flagsLen);
|
|
||||||
sprintf(sBuf, "%sLayer-Flags: 0x%x: %s\n", sBuf, result.dwLayerFlags, szFlagsStr);
|
|
||||||
|
|
||||||
for(DWORD i=0; i<SDB_MAX_SDBS; i++){
|
|
||||||
if (result.rgGuidDB[i] != GUID_NULL){
|
|
||||||
sprintf(sBuf, "%sShim-Database: %8.8X-%4.4X-%4.4X-%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X\n",
|
|
||||||
sBuf,
|
|
||||||
result.rgGuidDB[i].Data1,
|
|
||||||
result.rgGuidDB[i].Data2,
|
|
||||||
result.rgGuidDB[i].Data3,
|
|
||||||
result.rgGuidDB[i].Data4[0],
|
|
||||||
result.rgGuidDB[i].Data4[1],
|
|
||||||
result.rgGuidDB[i].Data4[2],
|
|
||||||
result.rgGuidDB[i].Data4[3],
|
|
||||||
result.rgGuidDB[i].Data4[4],
|
|
||||||
result.rgGuidDB[i].Data4[5],
|
|
||||||
result.rgGuidDB[i].Data4[6],
|
|
||||||
result.rgGuidDB[i].Data4[7]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//pSdbReleaseMatchingExe( ??? );
|
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
|
bRet = pSdbGetMatchingExe(NULL, (LPCWSTR)szFileName, NULL, NULL, 0, &result);
|
||||||
|
if(!bRet){
|
||||||
sprintf(sBuf, "No Shim found for file: %s\n", FileName);
|
sprintf(sBuf, "No Shim found for file: %s\n", FileName);
|
||||||
|
FreeLibrary(hAppHelp);
|
||||||
|
return (sBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sprintf(sBuf, "Shim found for file: %s\n", FileName);
|
||||||
|
const size_t flagsLen = 1024;
|
||||||
|
char szFlagsStr[flagsLen];
|
||||||
|
Flags2String(result.dwFlags, szFlagsStr, flagsLen);
|
||||||
|
sprintf(sBuf, "%sFlags: 0x%x: %s\n", sBuf, result.dwFlags, szFlagsStr);
|
||||||
|
|
||||||
|
if (result.trApphelp != TAGREF_NULL) sprintf(sBuf, "%sAppHelp-Message: 0x%x\n", sBuf, result.trApphelp);
|
||||||
|
|
||||||
|
for(DWORD i=0; i<result.dwExeCount; i++){
|
||||||
|
sprintf(sBuf, "%sExe-Shim: 0x%x, ", sBuf, result.atrExes[i]);
|
||||||
|
Flags2String(result.adwExeFlags[i], szFlagsStr, flagsLen);
|
||||||
|
sprintf(sBuf, "%sFlags: 0x%x: %s\n", sBuf, result.adwExeFlags[i], szFlagsStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(DWORD i=0; i<result.dwLayerCount; i++){
|
||||||
|
sprintf(sBuf, "%sLayer-Shim: 0x%x\n", sBuf, result.atrLayers[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Flags2String(result.dwLayerFlags, szFlagsStr, flagsLen);
|
||||||
|
sprintf(sBuf, "%sLayer-Flags: 0x%x: %s\n", sBuf, result.dwLayerFlags, szFlagsStr);
|
||||||
|
|
||||||
|
sprintf(sBuf, "%sCustomSDBMap: 0x%x\n", sBuf, result.dwCustomSDBMap);
|
||||||
|
for(DWORD i=0; i<SDB_MAX_SDBS; i++){
|
||||||
|
if (result.rgGuidDB[i] != GUID_NULL){
|
||||||
|
sprintf(sBuf, "%sShim-Database: %8.8X-%4.4X-%4.4X-%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X\n",
|
||||||
|
sBuf,
|
||||||
|
result.rgGuidDB[i].Data1,
|
||||||
|
result.rgGuidDB[i].Data2,
|
||||||
|
result.rgGuidDB[i].Data3,
|
||||||
|
result.rgGuidDB[i].Data4[0],
|
||||||
|
result.rgGuidDB[i].Data4[1],
|
||||||
|
result.rgGuidDB[i].Data4[2],
|
||||||
|
result.rgGuidDB[i].Data4[3],
|
||||||
|
result.rgGuidDB[i].Data4[4],
|
||||||
|
result.rgGuidDB[i].Data4[5],
|
||||||
|
result.rgGuidDB[i].Data4[6],
|
||||||
|
result.rgGuidDB[i].Data4[7]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pSdbReleaseMatchingExe(hSDB, (TAGREF)&result);
|
||||||
|
FreeLibrary(hAppHelp);
|
||||||
return sBuf;
|
return sBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,12 +29,15 @@ void CTabWindow::DoDataExchange(CDataExchange* pDX)
|
|||||||
CDialog::DoDataExchange(pDX);
|
CDialog::DoDataExchange(pDX);
|
||||||
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
|
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
|
||||||
|
|
||||||
// window management
|
// window style
|
||||||
DDX_Check(pDX, IDC_FIXWINFRAME, cTarget->m_FixWinFrame);
|
DDX_Radio(pDX, IDC_DEFAULTSTYLE, cTarget->m_WindowStyle);
|
||||||
DDX_Check(pDX, IDC_PREVENTMAXIMIZE, cTarget->m_PreventMaximize);
|
|
||||||
DDX_Check(pDX, IDC_LOCKWINSTYLE, cTarget->m_LockWinStyle);
|
DDX_Check(pDX, IDC_LOCKWINSTYLE, cTarget->m_LockWinStyle);
|
||||||
|
|
||||||
|
// window management
|
||||||
|
//DDX_Check(pDX, IDC_FIXWINFRAME, cTarget->m_FixWinFrame);
|
||||||
|
DDX_Check(pDX, IDC_PREVENTMAXIMIZE, cTarget->m_PreventMaximize);
|
||||||
DDX_Check(pDX, IDC_FIXPARENTWIN, cTarget->m_FixParentWin);
|
DDX_Check(pDX, IDC_FIXPARENTWIN, cTarget->m_FixParentWin);
|
||||||
DDX_Check(pDX, IDC_MODALSTYLE, cTarget->m_ModalStyle);
|
//DDX_Check(pDX, IDC_MODALSTYLE, cTarget->m_ModalStyle);
|
||||||
DDX_Check(pDX, IDC_FORCEWINRESIZE, cTarget->m_ForceWinResize);
|
DDX_Check(pDX, IDC_FORCEWINRESIZE, cTarget->m_ForceWinResize);
|
||||||
DDX_Check(pDX, IDC_HIDEMULTIMONITOR, cTarget->m_HideMultiMonitor);
|
DDX_Check(pDX, IDC_HIDEMULTIMONITOR, cTarget->m_HideMultiMonitor);
|
||||||
DDX_Check(pDX, IDC_RECOVERSCREENMODE, cTarget->m_RecoverScreenMode);
|
DDX_Check(pDX, IDC_RECOVERSCREENMODE, cTarget->m_RecoverScreenMode);
|
||||||
|
@ -163,7 +163,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
|||||||
m_AutoRefresh = FALSE;
|
m_AutoRefresh = FALSE;
|
||||||
m_IndependentRefresh = FALSE;
|
m_IndependentRefresh = FALSE;
|
||||||
m_TextureFormat = FALSE;
|
m_TextureFormat = FALSE;
|
||||||
m_FixWinFrame = FALSE;
|
//m_FixWinFrame = FALSE;
|
||||||
m_VideoToSystemMem = FALSE;
|
m_VideoToSystemMem = FALSE;
|
||||||
m_FixTextOut = FALSE;
|
m_FixTextOut = FALSE;
|
||||||
m_SharedDC = FALSE;
|
m_SharedDC = FALSE;
|
||||||
@ -195,7 +195,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
|||||||
m_ClientRemapping = TRUE; // default true !!
|
m_ClientRemapping = TRUE; // default true !!
|
||||||
m_LockWinStyle = FALSE;
|
m_LockWinStyle = FALSE;
|
||||||
m_FixParentWin = FALSE;
|
m_FixParentWin = FALSE;
|
||||||
m_ModalStyle = FALSE;
|
//m_ModalStyle = FALSE;
|
||||||
m_KeepAspectRatio = FALSE;
|
m_KeepAspectRatio = FALSE;
|
||||||
m_ForceWinResize = FALSE;
|
m_ForceWinResize = FALSE;
|
||||||
m_HideMultiMonitor = FALSE;
|
m_HideMultiMonitor = FALSE;
|
||||||
|
@ -42,6 +42,7 @@ public:
|
|||||||
int m_LogMode;
|
int m_LogMode;
|
||||||
int m_MonitorId;
|
int m_MonitorId;
|
||||||
int m_WinMovementType;
|
int m_WinMovementType;
|
||||||
|
int m_WindowStyle;
|
||||||
BOOL m_HookDI;
|
BOOL m_HookDI;
|
||||||
BOOL m_HookDI8;
|
BOOL m_HookDI8;
|
||||||
BOOL m_EmulateRelMouse;
|
BOOL m_EmulateRelMouse;
|
||||||
@ -112,7 +113,7 @@ public:
|
|||||||
BOOL m_AutoRefresh;
|
BOOL m_AutoRefresh;
|
||||||
BOOL m_IndependentRefresh;
|
BOOL m_IndependentRefresh;
|
||||||
BOOL m_TextureFormat;
|
BOOL m_TextureFormat;
|
||||||
BOOL m_FixWinFrame;
|
//BOOL m_FixWinFrame;
|
||||||
BOOL m_VideoToSystemMem;
|
BOOL m_VideoToSystemMem;
|
||||||
BOOL m_FixTextOut;
|
BOOL m_FixTextOut;
|
||||||
BOOL m_SharedDC;
|
BOOL m_SharedDC;
|
||||||
@ -144,7 +145,7 @@ public:
|
|||||||
BOOL m_ClientRemapping;
|
BOOL m_ClientRemapping;
|
||||||
BOOL m_LockWinStyle;
|
BOOL m_LockWinStyle;
|
||||||
BOOL m_FixParentWin;
|
BOOL m_FixParentWin;
|
||||||
BOOL m_ModalStyle;
|
//BOOL m_ModalStyle;
|
||||||
BOOL m_KeepAspectRatio;
|
BOOL m_KeepAspectRatio;
|
||||||
BOOL m_ForceWinResize;
|
BOOL m_ForceWinResize;
|
||||||
BOOL m_HideMultiMonitor;
|
BOOL m_HideMultiMonitor;
|
||||||
|
@ -55,8 +55,12 @@ BOOL CViewFlagsDialog::OnInitDialog()
|
|||||||
for(i=0, dword = t->flags7; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(6,i));
|
for(i=0, dword = t->flags7; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(6,i));
|
||||||
sflags.Append("\nFlags8: ");
|
sflags.Append("\nFlags8: ");
|
||||||
for(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(7,i));
|
for(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(7,i));
|
||||||
|
sflags.Append("\nFlags9: ");
|
||||||
|
for(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(8,i));
|
||||||
|
sflags.Append("\nFlags10: ");
|
||||||
|
for(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(9,i));
|
||||||
sflags.Append("\nTFlags: ");
|
sflags.Append("\nTFlags: ");
|
||||||
for(i=0, dword = t->tflags; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(8,i));
|
for(i=0, dword = t->tflags; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(10,i));
|
||||||
|
|
||||||
this->SetDlgItemTextA(IDC_DESKTOPINFO, sflags);
|
this->SetDlgItemTextA(IDC_DESKTOPINFO, sflags);
|
||||||
this->SetWindowTextA(t->path);
|
this->SetWindowTextA(t->path);
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,75 +0,0 @@
|
|||||||
// dxwndhostDoc.cpp : CDxwndhostDoc Define the behavior of the class.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "stdafx.h"
|
|
||||||
#include "dxwndhost.h"
|
|
||||||
|
|
||||||
#include "dxwndhostDoc.h"
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
#define new DEBUG_NEW
|
|
||||||
#undef THIS_FILE
|
|
||||||
static char THIS_FILE[] = __FILE__;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// CDxwndhostDoc
|
|
||||||
|
|
||||||
IMPLEMENT_DYNCREATE(CDxwndhostDoc, CDocument)
|
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CDxwndhostDoc, CDocument)
|
|
||||||
//{{AFX_MSG_MAP(CDxwndhostDoc)
|
|
||||||
//}}AFX_MSG_MAP
|
|
||||||
END_MESSAGE_MAP()
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// CDxwndhostDoc class constructor / destructor
|
|
||||||
|
|
||||||
CDxwndhostDoc::CDxwndhostDoc()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
CDxwndhostDoc::~CDxwndhostDoc()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL CDxwndhostDoc::OnNewDocument()
|
|
||||||
{
|
|
||||||
if (!CDocument::OnNewDocument())
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// CDxwndhostDoc Serialization
|
|
||||||
|
|
||||||
void CDxwndhostDoc::Serialize(CArchive& ar)
|
|
||||||
{
|
|
||||||
if (ar.IsStoring())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// CDxwndhostDoc Diagnostic Class
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
void CDxwndhostDoc::AssertValid() const
|
|
||||||
{
|
|
||||||
CDocument::AssertValid();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CDxwndhostDoc::Dump(CDumpContext& dc) const
|
|
||||||
{
|
|
||||||
CDocument::Dump(dc);
|
|
||||||
}
|
|
||||||
#endif //_DEBUG
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// CDxwndhostDoc Command
|
|
@ -354,6 +354,13 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
case 2: t->flags8 |= DDSFORMAT; break;
|
case 2: t->flags8 |= DDSFORMAT; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch(dlg->m_WindowStyle){
|
||||||
|
case 0: break;
|
||||||
|
case 1: t->flags2 |= MODALSTYLE; break;
|
||||||
|
case 2: t->flags |= FIXWINFRAME; break;
|
||||||
|
case 3: t->flags9 |= FIXTHINFRAME; break;
|
||||||
|
}
|
||||||
|
|
||||||
if(dlg->m_HookDI) t->flags |= HOOKDI;
|
if(dlg->m_HookDI) t->flags |= HOOKDI;
|
||||||
if(dlg->m_HookDI8) t->flags |= HOOKDI8;
|
if(dlg->m_HookDI8) t->flags |= HOOKDI8;
|
||||||
if(dlg->m_EmulateRelMouse) t->flags6 |= EMULATERELMOUSE;
|
if(dlg->m_EmulateRelMouse) t->flags6 |= EMULATERELMOUSE;
|
||||||
@ -453,7 +460,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
if(dlg->m_AutoRefresh) t->flags |= AUTOREFRESH;
|
if(dlg->m_AutoRefresh) t->flags |= AUTOREFRESH;
|
||||||
if(dlg->m_IndependentRefresh) t->flags2 |= INDEPENDENTREFRESH;
|
if(dlg->m_IndependentRefresh) t->flags2 |= INDEPENDENTREFRESH;
|
||||||
if(dlg->m_TextureFormat) t->flags5 |= TEXTUREFORMAT;
|
if(dlg->m_TextureFormat) t->flags5 |= TEXTUREFORMAT;
|
||||||
if(dlg->m_FixWinFrame) t->flags |= FIXWINFRAME;
|
//if(dlg->m_FixWinFrame) t->flags |= FIXWINFRAME;
|
||||||
if(dlg->m_VideoToSystemMem) t->flags |= SWITCHVIDEOMEMORY;
|
if(dlg->m_VideoToSystemMem) t->flags |= SWITCHVIDEOMEMORY;
|
||||||
if(dlg->m_FixTextOut) t->flags |= FIXTEXTOUT;
|
if(dlg->m_FixTextOut) t->flags |= FIXTEXTOUT;
|
||||||
if(dlg->m_HookGlide) t->flags4 |= HOOKGLIDE;
|
if(dlg->m_HookGlide) t->flags4 |= HOOKGLIDE;
|
||||||
@ -483,7 +490,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
if(dlg->m_ClientRemapping) t->flags |= CLIENTREMAPPING;
|
if(dlg->m_ClientRemapping) t->flags |= CLIENTREMAPPING;
|
||||||
if(dlg->m_LockWinStyle) t->flags |= LOCKWINSTYLE;
|
if(dlg->m_LockWinStyle) t->flags |= LOCKWINSTYLE;
|
||||||
if(dlg->m_FixParentWin) t->flags |= FIXPARENTWIN;
|
if(dlg->m_FixParentWin) t->flags |= FIXPARENTWIN;
|
||||||
if(dlg->m_ModalStyle) t->flags2 |= MODALSTYLE;
|
//if(dlg->m_ModalStyle) t->flags2 |= MODALSTYLE;
|
||||||
if(dlg->m_KeepAspectRatio) t->flags2 |= KEEPASPECTRATIO;
|
if(dlg->m_KeepAspectRatio) t->flags2 |= KEEPASPECTRATIO;
|
||||||
if(dlg->m_ForceWinResize) t->flags2 |= FORCEWINRESIZE;
|
if(dlg->m_ForceWinResize) t->flags2 |= FORCEWINRESIZE;
|
||||||
if(dlg->m_HideMultiMonitor) t->flags2 |= HIDEMULTIMONITOR;
|
if(dlg->m_HideMultiMonitor) t->flags2 |= HIDEMULTIMONITOR;
|
||||||
@ -689,6 +696,11 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
if( t->flags8 & RAWFORMAT) dlg->m_TextureFileFormat = 1;
|
if( t->flags8 & RAWFORMAT) dlg->m_TextureFileFormat = 1;
|
||||||
if( t->flags8 & DDSFORMAT) dlg->m_TextureFileFormat = 2;
|
if( t->flags8 & DDSFORMAT) dlg->m_TextureFileFormat = 2;
|
||||||
|
|
||||||
|
dlg->m_WindowStyle = 0;
|
||||||
|
if(t->flags2 & MODALSTYLE) dlg->m_WindowStyle = 1;
|
||||||
|
if(t->flags & FIXWINFRAME) dlg->m_WindowStyle = 2;
|
||||||
|
if(t->flags9 & FIXTHINFRAME) dlg->m_WindowStyle = 3;
|
||||||
|
|
||||||
dlg->m_HookDI = t->flags & HOOKDI ? 1 : 0;
|
dlg->m_HookDI = t->flags & HOOKDI ? 1 : 0;
|
||||||
dlg->m_HookDI8 = t->flags & HOOKDI8 ? 1 : 0;
|
dlg->m_HookDI8 = t->flags & HOOKDI8 ? 1 : 0;
|
||||||
dlg->m_EmulateRelMouse = t->flags6 & EMULATERELMOUSE ? 1 : 0;
|
dlg->m_EmulateRelMouse = t->flags6 & EMULATERELMOUSE ? 1 : 0;
|
||||||
@ -788,7 +800,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
dlg->m_AutoRefresh = t->flags & AUTOREFRESH ? 1 : 0;
|
dlg->m_AutoRefresh = t->flags & AUTOREFRESH ? 1 : 0;
|
||||||
dlg->m_IndependentRefresh = t->flags2 & INDEPENDENTREFRESH ? 1 : 0;
|
dlg->m_IndependentRefresh = t->flags2 & INDEPENDENTREFRESH ? 1 : 0;
|
||||||
dlg->m_TextureFormat = t->flags5 & TEXTUREFORMAT ? 1 : 0;
|
dlg->m_TextureFormat = t->flags5 & TEXTUREFORMAT ? 1 : 0;
|
||||||
dlg->m_FixWinFrame = t->flags & FIXWINFRAME ? 1 : 0;
|
//dlg->m_FixWinFrame = t->flags & FIXWINFRAME ? 1 : 0;
|
||||||
dlg->m_VideoToSystemMem = t->flags & SWITCHVIDEOMEMORY ? 1 : 0;
|
dlg->m_VideoToSystemMem = t->flags & SWITCHVIDEOMEMORY ? 1 : 0;
|
||||||
dlg->m_FixTextOut = t->flags & FIXTEXTOUT ? 1 : 0;
|
dlg->m_FixTextOut = t->flags & FIXTEXTOUT ? 1 : 0;
|
||||||
dlg->m_SharedDC = t->flags6 & SHAREDDC ? 1 : 0;
|
dlg->m_SharedDC = t->flags6 & SHAREDDC ? 1 : 0;
|
||||||
@ -819,7 +831,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
dlg->m_ClientRemapping = t->flags & CLIENTREMAPPING ? 1 : 0;
|
dlg->m_ClientRemapping = t->flags & CLIENTREMAPPING ? 1 : 0;
|
||||||
dlg->m_LockWinStyle = t->flags & LOCKWINSTYLE ? 1 : 0;
|
dlg->m_LockWinStyle = t->flags & LOCKWINSTYLE ? 1 : 0;
|
||||||
dlg->m_FixParentWin = t->flags & FIXPARENTWIN ? 1 : 0;
|
dlg->m_FixParentWin = t->flags & FIXPARENTWIN ? 1 : 0;
|
||||||
dlg->m_ModalStyle = t->flags2 & MODALSTYLE ? 1 : 0;
|
//dlg->m_ModalStyle = t->flags2 & MODALSTYLE ? 1 : 0;
|
||||||
dlg->m_KeepAspectRatio = t->flags2 & KEEPASPECTRATIO ? 1 : 0;
|
dlg->m_KeepAspectRatio = t->flags2 & KEEPASPECTRATIO ? 1 : 0;
|
||||||
dlg->m_ForceWinResize = t->flags2 & FORCEWINRESIZE ? 1 : 0;
|
dlg->m_ForceWinResize = t->flags2 & FORCEWINRESIZE ? 1 : 0;
|
||||||
dlg->m_HideMultiMonitor = t->flags2 & HIDEMULTIMONITOR ? 1 : 0;
|
dlg->m_HideMultiMonitor = t->flags2 & HIDEMULTIMONITOR ? 1 : 0;
|
||||||
@ -973,6 +985,14 @@ static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i,
|
|||||||
sprintf_s(val, sizeof(val), "%i", TargetMap->flags8);
|
sprintf_s(val, sizeof(val), "%i", TargetMap->flags8);
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
// -------
|
// -------
|
||||||
|
sprintf_s(key, sizeof(key), "flagn%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMap->flags9);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
// -------
|
||||||
|
sprintf_s(key, sizeof(key), "flago%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMap->flags10);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
// -------
|
||||||
sprintf_s(key, sizeof(key), "tflag%i", i);
|
sprintf_s(key, sizeof(key), "tflag%i", i);
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMap->tflags);
|
sprintf_s(val, sizeof(val), "%i", TargetMap->tflags);
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
@ -1041,6 +1061,16 @@ static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i,
|
|||||||
EscBuf = NULL;
|
EscBuf = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void SaveExportStamp(char *InitPath)
|
||||||
|
{
|
||||||
|
char val[32];
|
||||||
|
GetDllVersion(val);
|
||||||
|
time_t _tm = time(NULL);
|
||||||
|
struct tm *curtime = localtime(& _tm);
|
||||||
|
WritePrivateProfileString("stamp", "version", val, InitPath);
|
||||||
|
WritePrivateProfileString("stamp", "time", asctime(curtime), InitPath);
|
||||||
|
}
|
||||||
|
|
||||||
static void ClearTarget(int i, char *InitPath)
|
static void ClearTarget(int i, char *InitPath)
|
||||||
{
|
{
|
||||||
char key[32];
|
char key[32];
|
||||||
@ -1070,6 +1100,10 @@ static void ClearTarget(int i, char *InitPath)
|
|||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
sprintf_s(key, sizeof(key), "flagm%i", i);
|
sprintf_s(key, sizeof(key), "flagm%i", i);
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "flagn%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "flago%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
sprintf_s(key, sizeof(key), "tflag%i", i);
|
sprintf_s(key, sizeof(key), "tflag%i", i);
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
sprintf_s(key, sizeof(key), "initx%i", i);
|
sprintf_s(key, sizeof(key), "initx%i", i);
|
||||||
@ -1186,6 +1220,12 @@ static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, c
|
|||||||
sprintf_s(key, sizeof(key), "flagm%i", i);
|
sprintf_s(key, sizeof(key), "flagm%i", i);
|
||||||
TargetMap->flags8 = GetPrivateProfileInt("target", key, 0, InitPath);
|
TargetMap->flags8 = GetPrivateProfileInt("target", key, 0, InitPath);
|
||||||
// -------
|
// -------
|
||||||
|
sprintf_s(key, sizeof(key), "flagn%i", i);
|
||||||
|
TargetMap->flags9 = GetPrivateProfileInt("target", key, 0, InitPath);
|
||||||
|
// -------
|
||||||
|
sprintf_s(key, sizeof(key), "flago%i", i);
|
||||||
|
TargetMap->flags10= GetPrivateProfileInt("target", key, 0, InitPath);
|
||||||
|
// -------
|
||||||
sprintf_s(key, sizeof(key), "tflag%i", i);
|
sprintf_s(key, sizeof(key), "tflag%i", i);
|
||||||
TargetMap->tflags = GetPrivateProfileInt("target", key, 0, InitPath);
|
TargetMap->tflags = GetPrivateProfileInt("target", key, 0, InitPath);
|
||||||
// -------
|
// -------
|
||||||
@ -1508,6 +1548,7 @@ void CDxwndhostView::OnExport()
|
|||||||
TFlags = TargetMap->tflags;
|
TFlags = TargetMap->tflags;
|
||||||
TargetMap->tflags = 0;
|
TargetMap->tflags = 0;
|
||||||
SaveConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, path);
|
SaveConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, path);
|
||||||
|
SaveExportStamp(path);
|
||||||
TargetMap->tflags = TFlags;
|
TargetMap->tflags = TFlags;
|
||||||
if(GetPrivateProfileInt("window", "updatepaths", 1, gInitPath)) {
|
if(GetPrivateProfileInt("window", "updatepaths", 1, gInitPath)) {
|
||||||
GetFolderFromPath(path);
|
GetFolderFromPath(path);
|
||||||
|
BIN
host/resource
BIN
host/resource
Binary file not shown.
BIN
proxy/d3d8.suo
BIN
proxy/d3d8.suo
Binary file not shown.
BIN
proxy/d3d9.suo
BIN
proxy/d3d9.suo
Binary file not shown.
BIN
proxy/ddraw.suo
BIN
proxy/ddraw.suo
Binary file not shown.
@ -45,6 +45,8 @@ void InitDxWnd(void)
|
|||||||
target.flags6 = GetIntEntry("flagk0", 0);
|
target.flags6 = GetIntEntry("flagk0", 0);
|
||||||
target.flags7 = GetIntEntry("flagl0", 0);
|
target.flags7 = GetIntEntry("flagl0", 0);
|
||||||
target.flags8 = GetIntEntry("flagm0", 0);
|
target.flags8 = GetIntEntry("flagm0", 0);
|
||||||
|
target.flags9 = GetIntEntry("flagn0", 0);
|
||||||
|
target.flags10 = GetIntEntry("flago0", 0);
|
||||||
target.tflags = GetIntEntry("tflag0", 0);
|
target.tflags = GetIntEntry("tflag0", 0);
|
||||||
target.dflags = GetIntEntry("dflag0", 0);
|
target.dflags = GetIntEntry("dflag0", 0);
|
||||||
target.posx = GetIntEntry("posx0", 0);
|
target.posx = GetIntEntry("posx0", 0);
|
||||||
|
BIN
proxy/wing32.suo
BIN
proxy/wing32.suo
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user