mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_04_01_src_fx3
Former-commit-id: 7373e879fbf64993eef4fcf8e677427372e26d23
This commit is contained in:
parent
b8ec0f64c4
commit
46ef0171d4
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f6a96c3c20704b6b52ee2e8757c9fe7e52d36dcf6b9772c9e6e88488d9ac04dc
|
||||
size 764928
|
||||
oid sha256:980c05e0c87605ce728d6f896a4f42c8ba6bb4900af3a160f11be87dd57e81b8
|
||||
size 765440
|
||||
|
114
build/dxwnd.ini
114
build/dxwnd.ini
@ -1,3 +1,113 @@
|
||||
[window]
|
||||
exepath=F:\Games\ManTTSuperBike\
|
||||
exportpath=D:\DxWnd.develop\v2_04_01_beta\Release\
|
||||
exepath=F:\Games\Garfield\
|
||||
posx=597
|
||||
posy=556
|
||||
sizx=320
|
||||
sizy=200
|
||||
exportpath=D:\DxWnd.develop\v2_04_01_fx3_src\build\exports\
|
||||
[target]
|
||||
title0=Garfield - Caught in the Act
|
||||
path0=F:\Games\Garfield\GARFIELD.NOSHIM.EXE
|
||||
startfolder0=
|
||||
launchpath0=
|
||||
module0=
|
||||
opengllib0=
|
||||
notes0=
|
||||
registry0=
|
||||
ver0=0
|
||||
monitorid0=-1
|
||||
coord0=0
|
||||
flag0=673185826
|
||||
flagg0=1208221696
|
||||
flagh0=65556
|
||||
flagi0=138412036
|
||||
flagj0=4226
|
||||
flagk0=327680
|
||||
flagl0=8421376
|
||||
flagm0=0
|
||||
tflag0=-2147477245
|
||||
dflag0=0
|
||||
posx0=50
|
||||
posy0=50
|
||||
sizx0=800
|
||||
sizy0=600
|
||||
maxfps0=0
|
||||
initts0=0
|
||||
winver0=0
|
||||
maxres0=0
|
||||
swapeffect0=0
|
||||
maxddinterface0=7
|
||||
slowratio0=2
|
||||
scanline0=0
|
||||
initresw0=320
|
||||
initresh0=224
|
||||
title1=Titanic
|
||||
path1=F:\Games\Titanic\TI.noshim.EXE
|
||||
startfolder1=
|
||||
launchpath1=
|
||||
module1=
|
||||
opengllib1=
|
||||
notes1=
|
||||
registry1=
|
||||
ver1=0
|
||||
monitorid1=-1
|
||||
coord1=0
|
||||
flag1=-1474293718
|
||||
flagg1=1745879072
|
||||
flagh1=540692
|
||||
flagi1=138412036
|
||||
flagj1=4224
|
||||
flagk1=67584
|
||||
flagl1=269484032
|
||||
flagm1=9216
|
||||
tflag1=0
|
||||
dflag1=0
|
||||
posx1=50
|
||||
posy1=50
|
||||
sizx1=800
|
||||
sizy1=600
|
||||
maxfps1=0
|
||||
initts1=0
|
||||
winver1=0
|
||||
maxres1=-1
|
||||
swapeffect1=0
|
||||
maxddinterface1=7
|
||||
slowratio1=2
|
||||
scanline1=0
|
||||
initresw1=800
|
||||
initresh1=600
|
||||
title2=Titanic
|
||||
path2=F:\Games\Titanic\TI.noshim.EXE
|
||||
startfolder2=
|
||||
launchpath2=
|
||||
module2=
|
||||
opengllib2=
|
||||
notes2=
|
||||
registry2=
|
||||
ver2=0
|
||||
monitorid2=-1
|
||||
coord2=0
|
||||
flag2=-1474293718
|
||||
flagg2=1745879072
|
||||
flagh2=606228
|
||||
flagi2=138412036
|
||||
flagj2=4224
|
||||
flagk2=67584
|
||||
flagl2=269484032
|
||||
flagm2=9216
|
||||
tflag2=0
|
||||
dflag2=0
|
||||
posx2=50
|
||||
posy2=50
|
||||
sizx2=800
|
||||
sizy2=600
|
||||
maxfps2=0
|
||||
initts2=0
|
||||
winver2=0
|
||||
maxres2=-1
|
||||
swapeffect2=0
|
||||
maxddinterface2=7
|
||||
slowratio2=2
|
||||
scanline2=0
|
||||
initresw2=800
|
||||
initresh2=600
|
||||
|
36
build/exports/Garfield - Caught in the Act.dxw
Normal file
36
build/exports/Garfield - Caught in the Act.dxw
Normal file
@ -0,0 +1,36 @@
|
||||
[target]
|
||||
title0=Garfield - Caught in the Act
|
||||
path0=F:\Games\Garfield\GARFIELD.NOSHIM.EXE
|
||||
startfolder0=
|
||||
launchpath0=
|
||||
module0=
|
||||
opengllib0=
|
||||
notes0=
|
||||
registry0=
|
||||
ver0=0
|
||||
monitorid0=-1
|
||||
coord0=0
|
||||
flag0=673185826
|
||||
flagg0=1208221696
|
||||
flagh0=65556
|
||||
flagi0=138412036
|
||||
flagj0=4226
|
||||
flagk0=327680
|
||||
flagl0=8421376
|
||||
flagm0=0
|
||||
tflag0=0
|
||||
dflag0=0
|
||||
posx0=50
|
||||
posy0=50
|
||||
sizx0=800
|
||||
sizy0=600
|
||||
maxfps0=0
|
||||
initts0=0
|
||||
winver0=0
|
||||
maxres0=0
|
||||
swapeffect0=0
|
||||
maxddinterface0=7
|
||||
slowratio0=2
|
||||
scanline0=0
|
||||
initresw0=320
|
||||
initresh0=224
|
@ -10,14 +10,14 @@ registry0=
|
||||
ver0=0
|
||||
monitorid0=-1
|
||||
coord0=0
|
||||
flag0=-1474293726
|
||||
flag0=-1474297814
|
||||
flagg0=1745879072
|
||||
flagh0=540692
|
||||
flagi0=138412036
|
||||
flagj0=4224
|
||||
flagk0=67584
|
||||
flagl0=269484032
|
||||
flagm0=1024
|
||||
flagm0=9216
|
||||
tflag0=0
|
||||
dflag0=0
|
||||
posx0=50
|
||||
|
@ -1393,7 +1393,7 @@ fix: bug in Hybrid and GDI ddraw surface rendering
|
||||
fix: missing "No HAL Device" flag default to disabled
|
||||
fix: improvements in texture handling, dds format support for DirectDraw textures
|
||||
|
||||
v2.04.01
|
||||
v2.04.01/fx2
|
||||
add: preliminary WinG32 handling
|
||||
add: minimal WinG32 replacement, thank to Wine source code
|
||||
add: DirectX(2)/"Create a Desktop Win" option. Fixes "Man TT Super Bike"
|
||||
@ -1401,4 +1401,7 @@ add: new hooking schema for IAT organized like original "Al Unser Jr. Arcade Rac
|
||||
fix: in virtual registry fix to handle the '@' void label case properly
|
||||
fix: added hook for RegQueryValueA, used by "Warhammer 40.000 Shadow of the Horned Rat"
|
||||
fix: virtual registry logging
|
||||
|
||||
add: added SmackW32 hooking to bypass SmackColorRemapWithTrans and SmackColorRemap: SmackColorRemap seems involved in changing screen resolution in "Civil War Generals 2"
|
||||
fix: some log messages
|
||||
fix: SetWindowLong hooker: eliminated a unassigned variable condition
|
||||
fix: added hooker for GDI32/SetROP2 call to insert a InvalidateRect as in older OS. Makes "Titanic" working.
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:53879e29d60dcbc3d6ae8c5161d9749f3204fd2a2c5ae3e095bb81a47c3d90dc
|
||||
size 41984
|
||||
oid sha256:55b44016e314b1abcbcfa27cee66899407fab0694ef995bec1fc01e460dac5ca
|
||||
size 42496
|
||||
|
@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "TlHelp32.h"
|
||||
|
||||
#define VERSION "2.04.01"
|
||||
#define VERSION "2.04.01.fx3"
|
||||
|
||||
#define DDTHREADLOCK 1
|
||||
|
||||
|
Binary file not shown.
@ -70,6 +70,7 @@ static HookEntryEx_Type Hooks[]={
|
||||
{HOOK_HOT_CANDIDATE, 0, "SetPaletteEntries", (FARPROC)SetPaletteEntries, (FARPROC *)&pSetPaletteEntries, (FARPROC)extSetPaletteEntries},
|
||||
{HOOK_HOT_CANDIDATE, 0, "GetSystemPaletteUse", (FARPROC)GetSystemPaletteUse, (FARPROC *)&pGetSystemPaletteUse, (FARPROC)extGetSystemPaletteUse},
|
||||
{HOOK_HOT_CANDIDATE, 0, "CreateICA", (FARPROC)CreateICA, (FARPROC *)&pCreateICA, (FARPROC)extCreateICA}, // Riven
|
||||
{HOOK_HOT_CANDIDATE, 0, "SetROP2", (FARPROC)SetROP2, (FARPROC *)&pSetROP2, (FARPROC)extSetROP2}, // Titanic
|
||||
#ifdef TRACEPALETTE
|
||||
{HOOK_IAT_CANDIDATE, 0, "ResizePalette", (FARPROC)ResizePalette, (FARPROC *)&pResizePalette, (FARPROC)extResizePalette},
|
||||
#endif
|
||||
@ -1705,7 +1706,8 @@ int WINAPI extSetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines,
|
||||
{
|
||||
int ret;
|
||||
if(IsTraceDW){
|
||||
OutTrace("SetDIBits: hdc=%x hbmp=%x lines=(%d,%d) ColorUse=%x(%s)\n", hdc, hbmp, uStartScan, cScanLines, fuColorUse, ExplainDIBUsage(fuColorUse));
|
||||
OutTrace("SetDIBits: hdc=%x%s hbmp=%x lines=(%d,%d) ColorUse=%x(%s)\n",
|
||||
hdc, dxw.IsToRemap(hdc)?"(R)":"", hbmp, uStartScan, cScanLines, fuColorUse, ExplainDIBUsage(fuColorUse));
|
||||
TraceBITMAPINFOHEADER("SetDIBits", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader));
|
||||
}
|
||||
|
||||
@ -3287,6 +3289,20 @@ UINT WINAPI extSetPaletteEntries(HPALETTE hpal, UINT iStart, UINT cEntries, cons
|
||||
return ret;
|
||||
}
|
||||
|
||||
int WINAPI extSetROP2(HDC hdc, int fnDrawMode)
|
||||
{
|
||||
// In early OS the SetROP2 caused some sort of screen refresh, that does no longer happen in recent ones.
|
||||
// So wrapping the function and inserting a InvalidateRect right after that fixes the problem.
|
||||
// This trick fixes the black screens in "Titanic - an adventure out of time" on Win10.
|
||||
// N.b. Titanic calls SetTextColor, SetBkColor and SetROP2 in sequence, it might be possible that the
|
||||
// API to hook for refreshing is another, or even them all!
|
||||
int ret;
|
||||
OutTrace("SetROP2: hdc=%x drawmode=%d\n", hdc, fnDrawMode);
|
||||
ret = (*pSetROP2)(hdc, fnDrawMode);
|
||||
(*pInvalidateRect)(WindowFromDC(hdc), NULL, 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if 0
|
||||
LONG WINAPI extSetBitmapBits(HBITMAP hbmp, DWORD cBytes, VOID *lpBits)
|
||||
{
|
||||
|
@ -146,6 +146,7 @@ void *IATPatchSequential(HMODULE module, DWORD ordinal, char *dll, void *apiproc
|
||||
}
|
||||
pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva);
|
||||
|
||||
// move fname pointer to first API name
|
||||
char *fname;
|
||||
while(pidesc->FirstThunk){
|
||||
impmodule = (PSTR)(base + pidesc->Name);
|
||||
@ -154,7 +155,7 @@ void *IATPatchSequential(HMODULE module, DWORD ordinal, char *dll, void *apiproc
|
||||
pidesc ++;
|
||||
}
|
||||
pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva);
|
||||
OutTrace("IATPatch: no PE OFTs - first call=%s\n", fname);
|
||||
OutTraceB("IATPatch: first call=%s\n", fname);
|
||||
|
||||
while(pidesc->FirstThunk){
|
||||
impmodule = (PSTR)(base + pidesc->Name);
|
||||
@ -204,7 +205,7 @@ void *IATPatchSequential(HMODULE module, DWORD ordinal, char *dll, void *apiproc
|
||||
}
|
||||
|
||||
if(ptaddr->u1.Function) {
|
||||
OutTraceDW("IATPatch: hooking %s\n", fname);
|
||||
OutTraceDW("IATPatch: hooking %s\n", apiname);
|
||||
org = (void *)ptaddr->u1.Function;
|
||||
if(org == hookproc) return 0; // already hooked
|
||||
|
||||
@ -466,7 +467,7 @@ BOOL IsIATSequential(HMODULE module)
|
||||
// skip first string
|
||||
for(; *fname; fname++); for(; !*fname; fname++);
|
||||
// if second string is another DLL it is sequential, otherwise not.
|
||||
// OutTrace("IsIATSequential: second entry=%s\n", fname);
|
||||
OutTraceB("IsIATSequential: second entry=%s\n", fname);
|
||||
return (BOOL)stristr(fname, ".DLL");
|
||||
}
|
||||
__except(EXCEPTION_EXECUTE_HANDLER)
|
||||
|
@ -24,10 +24,14 @@ typedef struct {
|
||||
typedef Smack * (WINAPI *SmackOpen_Type)(HANDLE, UINT32, INT32);
|
||||
typedef Smack * (WINAPI *Smacker_Type)(HANDLE);
|
||||
typedef Smack * (WINAPI *Smacker2_Type)(HANDLE, UINT32);
|
||||
typedef Smack * (WINAPI *SmackColorRemap_Type)(HANDLE, const void PTR4 *, u32, u32);
|
||||
typedef Smack * (WINAPI *SmackColorRemapWithTrans_Type)(HANDLE, const void PTR4 *, u32, u32, u32);
|
||||
|
||||
SmackOpen_Type pSmackOpen;
|
||||
Smacker_Type pSmackClose, pSmackWait, pSmackDoFrame, pSmackNextFrame, pSmackSoundUseMSS, pSmackSoundUseDirectSound;
|
||||
Smacker2_Type pSmackSoundOnOff, pSmackGoto;
|
||||
SmackColorRemap_Type pSmackColorRemap;
|
||||
SmackColorRemapWithTrans_Type pSmackColorRemapWithTrans;
|
||||
|
||||
Smack * WINAPI extSmackOpen(HANDLE, UINT32, INT32);
|
||||
Smack * WINAPI extSmackClose(HANDLE);
|
||||
@ -38,6 +42,8 @@ Smack * WINAPI extSmackSoundUseMSS(HANDLE);
|
||||
Smack * WINAPI extSmackSoundUseDirectSound(HANDLE);
|
||||
Smack * WINAPI extSmackSoundOnOff(HANDLE, UINT32);
|
||||
Smack * WINAPI extSmackGoto(HANDLE, UINT32);
|
||||
Smack * WINAPI extSmackColorRemap(HANDLE, const void PTR4 *, u32, u32);
|
||||
Smack * WINAPI extSmackColorRemapWithTrans(HANDLE, const void PTR4 *, u32, u32, u32);
|
||||
|
||||
static HookEntryEx_Type Hooks[]={
|
||||
{HOOK_IAT_CANDIDATE, 0x000E, "_SmackOpen@12", (FARPROC)NULL, (FARPROC *)&pSmackOpen, (FARPROC)extSmackOpen},
|
||||
@ -49,6 +55,8 @@ static HookEntryEx_Type Hooks[]={
|
||||
{HOOK_IAT_CANDIDATE, 0x001B, "_SmackGoto@8", (FARPROC)NULL, (FARPROC *)&pSmackGoto, (FARPROC)extSmackGoto},
|
||||
{HOOK_IAT_CANDIDATE, 0x0015, "_SmackNextFrame@4", (FARPROC)NULL, (FARPROC *)&pSmackNextFrame, (FARPROC)extSmackNextFrame},
|
||||
{HOOK_IAT_CANDIDATE, 0x0026, "_SmackSoundUseDirectSound@4", (FARPROC)NULL, (FARPROC *)&pSmackSoundUseDirectSound, (FARPROC)extSmackSoundUseDirectSound},
|
||||
{HOOK_IAT_CANDIDATE, 0x0000, "_SmackColorRemap@16", (FARPROC)NULL, (FARPROC *)&pSmackColorRemap, (FARPROC)extSmackColorRemap},
|
||||
{HOOK_IAT_CANDIDATE, 0x0000, "_SmackColorRemapWithTrans@20", (FARPROC)NULL, (FARPROC *)&pSmackColorRemapWithTrans, (FARPROC)extSmackColorRemapWithTrans},
|
||||
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
||||
};
|
||||
|
||||
@ -185,6 +193,24 @@ Smack * WINAPI extSmackGoto(HANDLE h, UINT32 flag)
|
||||
return (*pSmackGoto)(h, flag);
|
||||
}
|
||||
|
||||
Smack * WINAPI extSmackColorRemap(HANDLE h, const void PTR4 *remappal, u32 numcolors, u32 paltype)
|
||||
{
|
||||
OutTraceDW("SmackColorRemap: h=%x numcolors=%d paltype=%d\n", h, numcolors, paltype);
|
||||
DumpSmack((Smack *)h);
|
||||
// BYPASS the call to avoid resolution changes
|
||||
//return (*pSmackColorRemap)(h, remappal, numcolors, paltype);
|
||||
return (Smack *)h;
|
||||
}
|
||||
|
||||
Smack * WINAPI extSmackColorRemapWithTrans(HANDLE h, const void PTR4 *remappal, u32 numcolors, u32 paltype, u32 transindex)
|
||||
{
|
||||
OutTraceDW("SmackColorRemapWithTrans: h=%x numcolors=%d paltype=%d transindex=%d\n", h, numcolors, paltype, transindex);
|
||||
DumpSmack((Smack *)h);
|
||||
// BYPASS the call to avoid resolution changes
|
||||
//return (*pSmackColorRemapWithTrans)(h, remappal, numcolors, paltype);
|
||||
return (Smack *)h;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------
|
||||
Used by M2 Tank Platoon II:
|
||||
Ordinal 0x0015 name _SmackNextFrame@4
|
||||
|
@ -109,35 +109,36 @@ typedef BOOL (WINAPI *GDIGetPixelFormat_Type)(HDC);
|
||||
typedef int (WINAPI *ChoosePixelFormat_Type)(HDC, const PIXELFORMATDESCRIPTOR *);
|
||||
typedef int (WINAPI *DescribePixelFormat_Type)(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR);
|
||||
typedef DWORD (WINAPI *GetObjectType_Type)(HGDIOBJ);
|
||||
typedef int (WINAPI *SetDIBits_Type)(HDC, HBITMAP, UINT, UINT, const VOID *, const BITMAPINFO *, UINT);
|
||||
typedef int (WINAPI *OffsetRgn_Type)(HRGN, int, int);
|
||||
typedef int (WINAPI *SetDIBits_Type)(HDC, HBITMAP, UINT, UINT, const VOID *, const BITMAPINFO *, UINT);
|
||||
typedef int (WINAPI *OffsetRgn_Type)(HRGN, int, int);
|
||||
typedef COLORREF (WINAPI *GetPixel_Type)(HDC, int, int);
|
||||
typedef BOOL (WINAPI *PlgBlt_Type)(HDC, const POINT *, HDC, int, int, int, int, HBITMAP, int, int);
|
||||
typedef BOOL (WINAPI *SetPixelV_Type)(HDC, int, int, COLORREF);
|
||||
typedef BOOL (WINAPI *Chord_Type)(HDC, int, int, int, int, int, int, int, int);
|
||||
typedef BOOL (WINAPI *PolyTextOutA_Type)(HDC, const POLYTEXTA *, int);
|
||||
typedef BOOL (WINAPI *PolyTextOutW_Type)(HDC, const POLYTEXTW *, int);
|
||||
typedef int (WINAPI *GetDIBits_Type)(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT);
|
||||
typedef BOOL (WINAPI *PlgBlt_Type)(HDC, const POINT *, HDC, int, int, int, int, HBITMAP, int, int);
|
||||
typedef BOOL (WINAPI *SetPixelV_Type)(HDC, int, int, COLORREF);
|
||||
typedef BOOL (WINAPI *Chord_Type)(HDC, int, int, int, int, int, int, int, int);
|
||||
typedef BOOL (WINAPI *PolyTextOutA_Type)(HDC, const POLYTEXTA *, int);
|
||||
typedef BOOL (WINAPI *PolyTextOutW_Type)(HDC, const POLYTEXTW *, int);
|
||||
typedef int (WINAPI *GetDIBits_Type)(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT);
|
||||
typedef HBITMAP (WINAPI *CreateDIBitmap_Type)(HDC, BITMAPINFOHEADER *, DWORD, const VOID *, const BITMAPINFO *, UINT);
|
||||
typedef HBITMAP (WINAPI *CreateDIBSection_Type)(HDC, const BITMAPINFO *, UINT, VOID **, HANDLE, DWORD);
|
||||
typedef HBITMAP (WINAPI *CreateDiscardableBitmap_Type)(HDC, int, int);
|
||||
typedef BOOL (WINAPI *ExtFloodFill_Type)(HDC, int, int, COLORREF, UINT);
|
||||
typedef BOOL (WINAPI *GdiAlphaBlend_Type)(HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION);
|
||||
typedef BOOL (WINAPI *GdiGradientFill_Type)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG);
|
||||
typedef BOOL (WINAPI *GdiTransparentBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, UINT);
|
||||
typedef BOOL (WINAPI *Pie_Type)(HDC, int, int, int, int, int, int, int, int);
|
||||
typedef BOOL (WINAPI *AngleArc_Type)(HDC, int, int, DWORD, FLOAT, FLOAT);
|
||||
typedef BOOL (WINAPI *PolyPolyline_Type)(HDC, const POINT *, const DWORD *, DWORD);
|
||||
typedef BOOL (WINAPI *FillRgn_Type)(HDC, HRGN, HBRUSH);
|
||||
typedef BOOL (WINAPI *FrameRgn_Type)(HDC, HRGN, HBRUSH, int, int);
|
||||
typedef BOOL (WINAPI *InvertRgn_Type)(HDC, HRGN);
|
||||
typedef BOOL (WINAPI *PaintRgn_Type)(HDC, HRGN);
|
||||
typedef int (WINAPI *SetMapMode_Type)(HDC, int);
|
||||
typedef BOOL (WINAPI *RoundRect_Type)(HDC, int, int, int, int, int, int);
|
||||
typedef BOOL (WINAPI *PolyPolygon_Type)(HDC, const POINT *, const INT *, int);
|
||||
//typedef BOOL (WINAPI *DPtoLP_Type)(HDC, LPPOINT, int);
|
||||
typedef BOOL (WINAPI *PlayEnhMetaFile_Type)(HDC, HENHMETAFILE, const RECT *);
|
||||
typedef UINT (WINAPI *SetPaletteEntries_Type)(HPALETTE, UINT, UINT, const PALETTEENTRY *);
|
||||
typedef BOOL (WINAPI *ExtFloodFill_Type)(HDC, int, int, COLORREF, UINT);
|
||||
typedef BOOL (WINAPI *GdiAlphaBlend_Type)(HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION);
|
||||
typedef BOOL (WINAPI *GdiGradientFill_Type)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG);
|
||||
typedef BOOL (WINAPI *GdiTransparentBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, UINT);
|
||||
typedef BOOL (WINAPI *Pie_Type)(HDC, int, int, int, int, int, int, int, int);
|
||||
typedef BOOL (WINAPI *AngleArc_Type)(HDC, int, int, DWORD, FLOAT, FLOAT);
|
||||
typedef BOOL (WINAPI *PolyPolyline_Type)(HDC, const POINT *, const DWORD *, DWORD);
|
||||
typedef BOOL (WINAPI *FillRgn_Type)(HDC, HRGN, HBRUSH);
|
||||
typedef BOOL (WINAPI *FrameRgn_Type)(HDC, HRGN, HBRUSH, int, int);
|
||||
typedef BOOL (WINAPI *InvertRgn_Type)(HDC, HRGN);
|
||||
typedef BOOL (WINAPI *PaintRgn_Type)(HDC, HRGN);
|
||||
typedef int (WINAPI *SetMapMode_Type)(HDC, int);
|
||||
typedef BOOL (WINAPI *RoundRect_Type)(HDC, int, int, int, int, int, int);
|
||||
typedef BOOL (WINAPI *PolyPolygon_Type)(HDC, const POINT *, const INT *, int);
|
||||
//typedef BOOL (WINAPI *DPtoLP_Type)(HDC, LPPOINT, int);
|
||||
typedef BOOL (WINAPI *PlayEnhMetaFile_Type)(HDC, HENHMETAFILE, const RECT *);
|
||||
typedef UINT (WINAPI *SetPaletteEntries_Type)(HPALETTE, UINT, UINT, const PALETTEENTRY *);
|
||||
typedef int (WINAPI *SetROP2_Type)(HDC, int);
|
||||
|
||||
// Kernel32.dll:
|
||||
typedef BOOL (WINAPI *GetDiskFreeSpaceA_Type)(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);
|
||||
@ -406,6 +407,7 @@ DXWEXTERN PolyPolygon_Type pPolyPolygon DXWINITIALIZED;
|
||||
//DXWEXTERN DPtoLP_Type pDPtoLP DXWINITIALIZED;
|
||||
DXWEXTERN PlayEnhMetaFile_Type pPlayEnhMetaFile DXWINITIALIZED;
|
||||
DXWEXTERN SetPaletteEntries_Type pSetPaletteEntries DXWINITIALIZED;
|
||||
DXWEXTERN SetROP2_Type pSetROP2 DXWINITIALIZED;
|
||||
|
||||
// Kernel32.dll:
|
||||
DXWEXTERN GetDiskFreeSpaceA_Type pGetDiskFreeSpaceA DXWINITIALIZED;
|
||||
@ -664,6 +666,7 @@ extern BOOL WINAPI extPolyPolygon(HDC, const POINT *, const INT *, int);
|
||||
//extern BOOL WINAPI extDPtoLP(HDC, LPPOINT, int);
|
||||
extern BOOL WINAPI extPlayEnhMetaFile(HDC, HENHMETAFILE, const RECT *);
|
||||
extern UINT WINAPI extSetPaletteEntries(HPALETTE, UINT, UINT, const PALETTEENTRY *);
|
||||
extern int WINAPI extSetROP2(HDC, int);
|
||||
|
||||
// Kernel32.dll:
|
||||
extern BOOL WINAPI extGetDiskFreeSpaceA(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);
|
||||
|
@ -899,7 +899,7 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong, SetWindowLon
|
||||
// v2.03.94.fx2: removed dxw.IsFullScreen() check here ... WinProc routine must be verified in all conditions
|
||||
// fixes "Nascar Racing 3" that was setting the WinProc while still in non fullscreen mode!
|
||||
if ((nIndex==GWL_WNDPROC)||(nIndex==DWL_DLGPROC)) {
|
||||
WNDPROC lres;
|
||||
LONG lres;
|
||||
WNDPROC OldProc;
|
||||
DWORD WinStyle;
|
||||
BOOL bHooked = FALSE;
|
||||
@ -921,42 +921,48 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong, SetWindowLon
|
||||
OldProc = (WNDPROC)(*pGetWindowLong)(hwnd, nIndex);
|
||||
WinStyle = (*pGetWindowLong)(hwnd, GWL_STYLE);
|
||||
|
||||
// hook extWindowProc to main win ....
|
||||
if(dxw.IsDesktop(hwnd) && !(dxw.dwFlags6 & NOWINDOWHOOKS)){
|
||||
if(OldProc==extWindowProc) OldProc=dxwws.GetProc(hwnd);
|
||||
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
|
||||
res=(LONG)OldProc;
|
||||
SetLastError(0);
|
||||
lres=(WNDPROC)(*pSetWindowLong)(hwnd, nIndex, (LONG)extWindowProc);
|
||||
OutTraceDW("SetWindowLong: DESKTOP hooked %x->%x\n", dwNewLong, extWindowProc);
|
||||
bHooked = TRUE;
|
||||
}
|
||||
while(TRUE){ // fake loop
|
||||
lres = -1; // initialize with not 0 value since 0 means error
|
||||
if(!(dxw.dwFlags6 & NOWINDOWHOOKS)){
|
||||
// hook extWindowProc to main win ....
|
||||
if(dxw.IsDesktop(hwnd)){
|
||||
if(OldProc==extWindowProc) OldProc=dxwws.GetProc(hwnd);
|
||||
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
|
||||
res=(LONG)OldProc;
|
||||
SetLastError(0);
|
||||
lres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extWindowProc);
|
||||
OutTraceDW("SetWindowLong: DESKTOP hooked %x->%x\n", dwNewLong, extWindowProc);
|
||||
break;
|
||||
}
|
||||
|
||||
// hook extChildWindowProc to child win ....
|
||||
if((WinStyle & WS_CHILD) && (dxw.dwFlags1 & HOOKCHILDWIN) && !(dxw.dwFlags6 & NOWINDOWHOOKS)){
|
||||
if(OldProc==extChildWindowProc) OldProc=dxwws.GetProc(hwnd);
|
||||
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
|
||||
res=(LONG)OldProc;
|
||||
SetLastError(0);
|
||||
lres=(WNDPROC)(*pSetWindowLong)(hwnd, nIndex, (LONG)extChildWindowProc);
|
||||
OutTraceDW("SetWindowLong: CHILD hooked %x->%x\n", dwNewLong, extChildWindowProc);
|
||||
bHooked = TRUE;
|
||||
}
|
||||
// hook extDlgWindowProc to dialog win ....
|
||||
if((WinStyle & DWL_DLGPROC) && (dxw.dwFlags1 & HOOKCHILDWIN)){
|
||||
if(OldProc==extDialogWindowProc) OldProc=dxwws.GetProc(hwnd);
|
||||
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
|
||||
res=(LONG)OldProc;
|
||||
SetLastError(0);
|
||||
lres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extDialogWindowProc);
|
||||
OutTraceDW("SetWindowLong: DIALOG hooked %x->%x\n", dwNewLong, extDialogWindowProc);
|
||||
break;
|
||||
}
|
||||
|
||||
// hook extDlgWindowProc to dialog win ....
|
||||
if((WinStyle & DWL_DLGPROC) && (dxw.dwFlags1 & HOOKCHILDWIN) && !(dxw.dwFlags6 & NOWINDOWHOOKS)){
|
||||
if(OldProc==extDialogWindowProc) OldProc=dxwws.GetProc(hwnd);
|
||||
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
|
||||
res=(LONG)OldProc;
|
||||
SetLastError(0);
|
||||
lres=(WNDPROC)(*pSetWindowLong)(hwnd, nIndex, (LONG)extDialogWindowProc);
|
||||
OutTraceDW("SetWindowLong: DIALOG hooked %x->%x\n", dwNewLong, extDialogWindowProc);
|
||||
bHooked = TRUE;
|
||||
}
|
||||
// hook extChildWindowProc to child win ....
|
||||
if((WinStyle & WS_CHILD) && (dxw.dwFlags1 & HOOKCHILDWIN)){
|
||||
if(OldProc==extChildWindowProc) OldProc=dxwws.GetProc(hwnd);
|
||||
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
|
||||
res=(LONG)OldProc;
|
||||
SetLastError(0);
|
||||
lres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extChildWindowProc);
|
||||
OutTraceDW("SetWindowLong: CHILD hooked %x->%x\n", dwNewLong, extChildWindowProc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// hook dwNewLong if not done otherwise
|
||||
if(!bHooked) res=(*pSetWindowLong)(hwnd, nIndex, dwNewLong);
|
||||
if(!lres && GetLastError())OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
// hook dwNewLong if not done otherwise
|
||||
res = (*pSetWindowLong)(hwnd, nIndex, dwNewLong);
|
||||
break;
|
||||
}
|
||||
if(!lres && GetLastError()) OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
}
|
||||
else{
|
||||
// through here for any message different from GWL_WNDPROC or DWL_DLGPROC
|
||||
@ -3747,7 +3753,7 @@ BOOL WINAPI extSwitchDesktop(HDESK hDesktop)
|
||||
|
||||
HDESK WINAPI extOpenDesktop(LPTSTR lpszDesktop, DWORD dwFlags, BOOL fInherit, ACCESS_MASK dwDesiredAccess)
|
||||
{
|
||||
OutTraceDW("CreateDesktop: SUPPRESS flags=%x access=%x\n", dwFlags, dwDesiredAccess);
|
||||
OutTraceDW("OpenDesktop: SUPPRESS flags=%x access=%x\n", dwFlags, dwDesiredAccess);
|
||||
return (HDESK)0xDEADBEEF; // fake handle
|
||||
//return (HDESK)NULL; // fake handle
|
||||
}
|
||||
|
BIN
wing/wing32.suo
BIN
wing/wing32.suo
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user