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

v2_03_13_src

Former-commit-id: 638306d2c4f8094c5e0c0cc46f04b11a01b7a8f3
This commit is contained in:
gho tik 2015-11-03 11:40:28 -05:00 committed by Refael ACkermann
parent 8050fe4ddb
commit 9018a2a20b
26 changed files with 355 additions and 35 deletions

Binary file not shown.

View File

@ -22,3 +22,5 @@ refresh=
logtoggle=
plocktoggle=
fpstoggle=
printscreen=0x7B

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5005c1da2c65a47e47378d41ed67cb908a2fd475ced015bddebe715c7f1d71d7
size 570368
oid sha256:a309ebf6376c46e11161cf10c80cfaec09dc6bb88fa7ac4d8bbd0cf92e243eb8
size 571904

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2e73542e5cc2b9a1fa1d6429230b756694eb361b63fe55b812cb1c31c118e938
oid sha256:e7bef752b0ed1dd25215248cadaae676418c24c88518b878d1328e2e34abb6ef
size 538112

View File

@ -6,7 +6,7 @@ module0=
opengllib0=
ver0=0
coord0=0
flag0=134218272
flag0=134217762
flagg0=1207959552
flagh0=20
flagi0=138412036
@ -25,3 +25,5 @@ maxfps0=0
initts0=0
winver0=0
maxres0=-1
notes0=
flagj0=128

View File

@ -0,0 +1,29 @@
[target]
title0=Dark Fall - The Journal (GOG 2.0.0.6)
path0=D:\Games\Dark Fall - The Journal 2_0_0_6\DarkFall.exe
launchpath0=
module0=
opengllib0=
notes0=
ver0=0
coord0=0
flag0=713031682
flagg0=1242562560
flagh0=20
flagi0=205520900
flagj0=4224
tflag0=0
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=50
posy0=50
sizx0=640
sizy0=480
maxfps0=0
initts0=0
winver0=0
maxres0=-1

View File

@ -5,7 +5,7 @@ module0=
opengllib0=
ver0=1
coord0=0
flag0=138428450
flag0=138428448
flagg0=1242562576
flagh0=20
flagi0=4194304
@ -26,4 +26,4 @@ launchpath0=
winver0=0
maxres0=0
notes0=
flagj0=129
flagj0=8388737

View File

@ -0,0 +1,29 @@
[target]
title0=Dink Smallwood
path0=D:\Games\Dink Smallwood\dink.exe
launchpath0=
module0=
opengllib0=
notes0=
ver0=0
coord0=0
flag0=134217762
flagg0=1207959552
flagh0=20
flagi0=138412038
flagj0=4224
tflag0=536870912
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1

View File

@ -5,10 +5,10 @@ module0=
opengllib0=
ver0=0
coord0=0
flag0=134234146
flag0=402669600
flagg0=1207959552
flagh0=20
flagi0=4
flagi0=4194308
tflag0=0
initx0=0
inity0=0
@ -24,3 +24,6 @@ maxfps0=0
initts0=0
winver0=0
maxres0=-1
launchpath0=
notes0=
flagj0=8388736

View File

@ -0,0 +1,29 @@
[target]
title0=Road Rash
path0=D:\Games\road rash\ROADRASH.EXE
launchpath0=
module0=
opengllib0=
notes0=
ver0=0
coord0=0
flag0=134217762
flagg0=1744830464
flagh0=1044
flagi0=1212153860
flagj0=4224
tflag0=0
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1

View File

@ -1,5 +1,5 @@
[window]
posx=1292
posy=131
posx=541
posy=525
sizx=320
sizy=787
sizy=406

View File

@ -751,4 +751,11 @@ fix: dinput GetDeviceData
add: implemented "Release mouse outside window" functionality in dinput calls
fix: now "Release mouse outside window" leaves the mouse close to where it left the window
fix: in GUI, keeps memory of last used paths
fix: several log messages
fix: several log messages
v2.03.13
add: integrated printscreen facility with 8BPP paletized dump, activated by "printscreen" special key (default Alt-F12)
fix: recovery for lost surfaces (i.e. after a Ctrl+Alt+Del command)
fix: palette display form showing active entries
fix: EnumDisplayModes hook in emulate surface mode
fix: several log improvements

View File

@ -0,0 +1,13 @@
[HKEY_LOCAL_MACHINE\SOFTWARE]
; Road Rash
[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts]
[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts\RoadRash 95]
""=""
"Path"="."
"CheckDialup"=hex:00
"ChatState"=hex:02
"MiniDash"=hex:00
"OpponentList"=hex:01

View File

@ -240,6 +240,7 @@ static HRESULT sBltToPrimary(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdest
if (lpdds != lpddssrc){
if (IsDebug) BlitTrace("SRC2EMU", &emurect, &destrect, __LINE__);
if(destrect.top == -32000) return DD_OK; // happens when window is minimized & do not notify on task switch ...
if(lpdds->IsLost()) lpdds->Restore(); // lpDDSEmu_Back could get lost .....
res=(*pBlt)(lpdds, &emurect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);
}
@ -282,6 +283,8 @@ static HRESULT sBltToPrimary(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdest
return res;
}
if(lpDDSEmu_Prim->IsLost()) lpDDSEmu_Prim->Restore();
dxw.ShowOverlay(lpDDSSource);
if (IsDebug) BlitTrace("BACK2PRIM", &emurect, &destrect, __LINE__);
res=(*pPrimaryBlt)(lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect);

View File

@ -501,10 +501,6 @@ void mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries, BOOL Has25
int i;
extern DXWNDSTATUS *pStatus;
// copy the palette entries on the current system palette
for(int idx=0; idx<dwcount; idx++)
pStatus->Palette[dwstart+idx]= lpentries[idx];
// if has reserved palette entries, recover them
if(!Has256ColorsPalette){
int nStatCols, nPalEntries;
@ -531,6 +527,10 @@ void mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries, BOOL Has25
}
}
// copy the palette entries on the current system palette
for(int idx=0; idx<dwcount; idx++)
pStatus->Palette[dwstart+idx]= lpentries[idx];
for(i = 0; i < dwcount; i ++){
PALETTEENTRY PalColor;
PalColor = lpentries[i];
@ -883,6 +883,29 @@ int SurfaceDescrSize(LPDIRECTDRAWSURFACE lpdds)
return sizeof(DDSURFACEDESC);
}
int SurfaceDescrSizeD(LPDIRECTDRAW lpdd)
{
char sMsg[81];
void *extCreateSurface = NULL;
if(lpdd){
__try{
extCreateSurface=(void *)*(DWORD *)(*(DWORD *)lpdd + 24);
}
__except (EXCEPTION_EXECUTE_HANDLER){
return sizeof(DDSURFACEDESC);
};
if(extCreateSurface==(void *)extCreateSurface7) return sizeof(DDSURFACEDESC2);
if(extCreateSurface==(void *)extCreateSurface4) return sizeof(DDSURFACEDESC2);
if(extCreateSurface==(void *)extCreateSurface2) return sizeof(DDSURFACEDESC);
if(extCreateSurface==(void *)extCreateSurface1) return sizeof(DDSURFACEDESC);
}
sprintf_s(sMsg, 80, "SurfaceDescrSizeD(%x) can't match %x\n", lpdd, extCreateSurface);
OutTraceDW(sMsg);
if (IsAssertEnabled) MessageBox(0, sMsg, "SurfaceDescrSizeD", MB_OK | MB_ICONEXCLAMATION);
return sizeof(DDSURFACEDESC);
}
int lpddsHookedVersion(LPDIRECTDRAWSURFACE lpdds)
{
char sMsg[81];
@ -3150,7 +3173,6 @@ HRESULT WINAPI ColorConversionGDI(LPDIRECTDRAWSURFACE lpdds, RECT emurect, LPDIR
{
// GDICOLORCONV: use GDI capabilities to convert color depth by BitBlt-ting between different hdc
HRESULT res;
OutTrace("STEP: GDI Color Conversion\n");
do {
HDC hdc_source, hdc_dest;
res=(*pGetDC)(lpdds, &hdc_source);
@ -3425,6 +3447,7 @@ HRESULT WINAPI extCreatePalette(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY
//if (dwflags & ~(DDPCAPS_PRIMARYSURFACE|DDPCAPS_8BIT|DDPCAPS_ALLOW256|DDPCAPS_INITIALIZE_LEGACY)) STOPPER("Palette flags");
if(dwflags & DDPCAPS_ALLOW256) Has256ColorsPalette = TRUE;
if(!(dwflags & DDPCAPS_PRIMARYSURFACE)) Has256ColorsPalette = TRUE;
if(dxw.dwFlags1 & EMULATESURFACE) dwflags &= ~DDPCAPS_PRIMARYSURFACE;
res = (*pCreatePalette)(lpdd, dwflags, lpddpa, lplpddp, pu);
@ -3584,7 +3607,12 @@ HRESULT WINAPI extLock(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC
res = (*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent);
OutTraceDW("Lock RETRY: ret=%x(%s)\n", res, ExplainDDError(res));
}
if(res) OutTraceE("Lock ERROR: ret=%x(%s)\n", res, ExplainDDError(res));
if(res==DDERR_SURFACELOST){
lpdds->Restore();
res = (*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent);
OutTraceDW("Lock RETRY: ret=%x(%s)\n", res, ExplainDDError(res));
}
if(res) OutTraceE("Lock ERROR: ret=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
OutTraceB("Lock: lPitch=%d lpSurface=%x %s\n",
lpDDSurfaceDesc->lPitch, lpDDSurfaceDesc->lpSurface, LogSurfaceAttributes(lpDDSurfaceDesc, "[Locked]", __LINE__));
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;
@ -3664,7 +3692,7 @@ HRESULT WINAPI extLockDir(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACED
res=(*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent);
if(res) OutTraceE("Lock ERROR: ret=%x(%s)\n", res, ExplainDDError(res));
if(res) OutTraceE("Lock ERROR: ret=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
OutTraceB("Lock: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)lpDDSurfaceDesc, "[Locked]" , __LINE__));
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;
@ -4041,8 +4069,7 @@ HRESULT WINAPI extEnumDisplayModes(EnumDisplayModes1_Type pEnumDisplayModes, LPD
EmuDesc.dwRefreshRate = 0;
EmuDesc.ddpfPixelFormat.dwFlags = DDPF_RGB;
if (lpddsd) dwSize=lpddsd->dwSize; // sizeof either DDSURFACEDESC or DDSURFACEDESC2 !!!
else dwSize = sizeof(DDSURFACEDESC2);
if(dwSize > sizeof(DDSURFACEDESC2)) dwSize=sizeof(DDSURFACEDESC2);
else dwSize=SurfaceDescrSizeD(lpdd);
memset(&EmuDesc, 0, dwSize);
EmuDesc.dwSize=dwSize;
EmuDesc.dwFlags=DDSD_PIXELFORMAT|DDSD_REFRESHRATE|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PITCH;

132
dll/ddshot.cpp Normal file
View File

@ -0,0 +1,132 @@
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
#include "dxwnd.h"
#include "dxwcore.hpp"
#include "dxhelper.h"
extern char *ExplainDDError(DWORD);
typedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);
typedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT);
typedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID);
extern Lock_Type pLock;
extern Unlock4_Type pUnlockMethod(LPDIRECTDRAWSURFACE);
extern int Set_dwSize_From_Surface(LPDIRECTDRAWSURFACE);
void DDrawScreenShot()
{
LPDIRECTDRAWSURFACE s;
DDSURFACEDESC2 ddsd;
int w, h, iSurfaceSize, iScanLineSize;
HRESULT res;
static int MinTexX, MinTexY, MaxTexX, MaxTexY;
static BOOL DoOnce = TRUE;
char pszFile[MAX_PATH];
static int hash = 0;
if(DoOnce){
sprintf_s(pszFile, MAX_PATH, "%s\\screenshot.out", GetDxWndPath());
CreateDirectory(pszFile, NULL);
while(TRUE){
sprintf_s(pszFile, MAX_PATH, "%s\\screenshot.out\\shot.%08d.bmp", GetDxWndPath(), hash);
if(GetFileAttributes(pszFile) == INVALID_FILE_ATTRIBUTES) break;
hash++;
}
DoOnce = FALSE;
}
if(dxw.dwFlags5 & GDIMODE){
extern LPDIRECTDRAWSURFACE lpDDSBack;
s = lpDDSBack;
}
else{
s = dxw.GetPrimarySurface();
}
if(!s) return;
memset(&ddsd,0,sizeof(DDSURFACEDESC2));
ddsd.dwSize = Set_dwSize_From_Surface(s);
ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;
if(res=(*pLock)(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){
OutTraceE("ScreenShot: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
return;
}
while (TRUE) { // fake loop
OutTrace("ScreenShot: lpdds=%x BitCount=%d size=(%dx%d)\n",
s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight);
w = ddsd.dwWidth;
h = ddsd.dwHeight;
if(ddsd.ddpfPixelFormat.dwRGBBitCount == 0) {
OutTrace("ScreenShot: SKIP 0BPP texture\n");
break;
}
iSurfaceSize = ddsd.dwHeight * ddsd.lPitch;
FILE *hf;
BITMAPFILEHEADER hdr; // bitmap file-header
BITMAPV4HEADER pbi; // bitmap info-header
memset((void *)&pbi, 0, sizeof(BITMAPV4HEADER));
pbi.bV4Size = sizeof(BITMAPV4HEADER);
pbi.bV4Width = ddsd.dwWidth;
pbi.bV4Height = ddsd.dwHeight;
pbi.bV4BitCount = (WORD)ddsd.ddpfPixelFormat.dwRGBBitCount;
pbi.bV4SizeImage = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8 * pbi.bV4Height;
pbi.bV4Height = - pbi.bV4Height;
pbi.bV4Planes = 1;
pbi.bV4V4Compression = BI_BITFIELDS;
if(pbi.bV4BitCount == 8) pbi.bV4V4Compression = BI_RGB;
pbi.bV4XPelsPerMeter = 1;
pbi.bV4YPelsPerMeter = 1;
pbi.bV4ClrUsed = 0;
if(pbi.bV4BitCount == 8) pbi.bV4ClrUsed = 256;
pbi.bV4ClrImportant = 0;
pbi.bV4RedMask = ddsd.ddpfPixelFormat.dwRBitMask;
pbi.bV4GreenMask = ddsd.ddpfPixelFormat.dwGBitMask;
pbi.bV4BlueMask = ddsd.ddpfPixelFormat.dwBBitMask;
pbi.bV4AlphaMask = ddsd.ddpfPixelFormat.dwRGBAlphaBitMask;
pbi.bV4CSType = LCS_CALIBRATED_RGB;
iScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8;
// Create the .BMP file.
sprintf_s(pszFile, MAX_PATH, "%s\\screenshot.out\\shot.%08d.bmp", GetDxWndPath(), hash++);
hf = fopen(pszFile, "wb");
if(!hf) break;
hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M"
// Compute the size of the entire file.
hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof(RGBQUAD) + pbi.bV4SizeImage);
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;
// Compute the offset to the array of color indices.
hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof (RGBQUAD);
// Copy the BITMAPFILEHEADER into the .BMP file.
fwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf);
// Copy the BITMAPINFOHEADER array into the file.
fwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER), 1, hf);
// Copy the RGBQUAD array into the file.
if(pbi.bV4ClrUsed){
extern DWORD PaletteEntries[256];
fwrite((LPVOID)PaletteEntries, pbi.bV4ClrUsed * sizeof (RGBQUAD), 1, hf);
}
// Copy the array of color indices into the .BMP file.
for(int y=0; y<(int)ddsd.dwHeight; y++)
fwrite((BYTE *)ddsd.lpSurface + (y*ddsd.lPitch), iScanLineSize, 1, hf);
// Close the .BMP file.
fclose(hf);
break;
}
res=(*pUnlockMethod(s))(s, NULL);
if (res) OutTraceE("ScreenShot: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__);
}

View File

@ -778,6 +778,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
static int LastTimeShift;
static int SaveTimeShift;
static BOOL TimeShiftToggle=TRUE;
extern void DDrawScreenShot();
if(DoOnce){
DoOnce=FALSE;
@ -1093,6 +1094,9 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
TerminateProcess(GetCurrentProcess(),0);
}
break;
case DXVK_PRINTSCREEN:
DDrawScreenShot();
break;
default:
break;
}

View File

@ -1903,7 +1903,8 @@ static char *VKeyLabels[DXVK_SIZE]={
"timefast",
"timeslow",
"timetoggle",
"altf4"
"altf4",
"printscreen"
};
void dxwCore::MapKeysInit()

View File

@ -240,6 +240,7 @@ typedef enum {
DXVK_TIMESLOW,
DXVK_TIMETOGGLE,
DXVK_ALTF4,
DXVK_PRINTSCREEN,
DXVK_SIZE
};

View File

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

Binary file not shown.

View File

@ -261,6 +261,10 @@
/>
</FileConfiguration>
</File>
<File
RelativePath=".\ddshot.cpp"
>
</File>
<File
RelativePath=".\ddtexture.cpp"
>

View File

@ -51,6 +51,13 @@ COLORREF WINAPI extSetTextColor(HDC hdc, COLORREF crColor);
int WINAPI extSetBkMode(HDC, int);
*/
typedef UINT (WINAPI *GetPaletteEntries_Type)(HPALETTE, UINT, UINT, LPPALETTEENTRY);
typedef UINT (WINAPI *GetSystemPaletteUse_Type)(HDC);
GetPaletteEntries_Type pGetPaletteEntries = NULL;
GetSystemPaletteUse_Type pGetSystemPaletteUse = NULL;
UINT WINAPI extGetPaletteEntries(HPALETTE, UINT, UINT, LPPALETTEENTRY);
UINT WINAPI extGetSystemPaletteUse(HDC);
static HookEntry_Type Hooks[]={
{HOOK_IAT_CANDIDATE, "GetDeviceCaps", (FARPROC)GetDeviceCaps, (FARPROC *)&pGDIGetDeviceCaps, (FARPROC)extGetDeviceCaps},
@ -71,6 +78,11 @@ static HookEntry_Type Hooks[]={
{HOOK_IAT_CANDIDATE, "GetPixelFormat", (FARPROC)NULL, (FARPROC *)&pGDIGetPixelFormat, (FARPROC)extGDIGetPixelFormat},
{HOOK_IAT_CANDIDATE, "ChoosePixelFormat", (FARPROC)NULL, (FARPROC *)&pChoosePixelFormat, (FARPROC)extChoosePixelFormat},
{HOOK_IAT_CANDIDATE, "DescribePixelFormat", (FARPROC)NULL, (FARPROC *)&pDescribePixelFormat, (FARPROC)extDescribePixelFormat},
{HOOK_HOT_CANDIDATE, "GetPaletteEntries", (FARPROC)GetPaletteEntries, (FARPROC *)&pGetPaletteEntries, (FARPROC)extGetPaletteEntries},
{HOOK_HOT_CANDIDATE, "GetSystemPaletteUse", (FARPROC)GetSystemPaletteUse, (FARPROC *)&pGetSystemPaletteUse, (FARPROC)extGetSystemPaletteUse},
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
};
@ -479,15 +491,10 @@ BOOL WINAPI extGDIRestoreDC(HDC hdc, int nSavedDC)
HPALETTE WINAPI extGDICreatePalette(CONST LOGPALETTE *plpal)
{
HPALETTE ret;
int idx;
OutTraceDW("GDI.CreatePalette: plpal=%x version=%x NumEntries=%x\n", plpal, plpal->palVersion, plpal->palNumEntries);
OutTraceDW("GDI.CreatePalette: plpal=%x version=%x NumEntries=%d\n", plpal, plpal->palVersion, plpal->palNumEntries);
if(IsDebug) dxw.DumpPalette(plpal->palNumEntries, (LPPALETTEENTRY)plpal->palPalEntry);
ret=(*pGDICreatePalette)(plpal);
if(IsDebug){
OutTraceDW("PalEntry[%x]= ", plpal->palNumEntries);
for(idx=0; idx<plpal->palNumEntries; idx++) OutTraceDW("(%x)", plpal->palPalEntry[idx]);
OutTraceDW("\n");
}
OutTraceDW("GDI.CreatePalette: hPalette=%x\n", ret);
return ret;
}
@ -525,7 +532,7 @@ UINT WINAPI extRealizePalette(HDC hdc)
if((OBJ_DC == GetObjectType(hdc)) && (dxw.dwFlags1 & EMULATESURFACE)){
PALETTEENTRY PalEntries[256];
UINT nEntries;
nEntries=GetPaletteEntries(hDesktopPalette, 0, 256, PalEntries);
nEntries=(*pGetPaletteEntries)(hDesktopPalette, 0, 256, PalEntries);
mySetPalette(0, nEntries, PalEntries, TRUE); // ??
if(IsDebug) dxw.DumpPalette(nEntries, PalEntries);
ret=DD_OK;
@ -1751,10 +1758,27 @@ int WINAPI extAddFontResourceW(LPCWSTR lpszFontFile)
UINT WINAPI extSetSystemPaletteUse(HDC hdc, UINT uUsage)
{
//BOOL res;
OutTraceDW("SetSystemPaletteUse: hdc=%x Usage=%x(%s)\n", hdc, uUsage, ExplainPaletteUse(uUsage));
OutTraceDW("GDI.SetSystemPaletteUse: hdc=%x Usage=%x(%s)\n", hdc, uUsage, ExplainPaletteUse(uUsage));
return SYSPAL_NOSTATIC256;
}
UINT WINAPI extGetPaletteEntries(HPALETTE hpal, UINT iStartIndex, UINT nEntries, LPPALETTEENTRY lppe)
{
UINT res;
OutTraceDW("GDI.GetPaletteEntries: hpal=%x iStartIndex=%d nEntries=%d\n", hpal, iStartIndex, nEntries);
res=(*pGetPaletteEntries)(hpal, iStartIndex, nEntries, lppe);
return res;
}
UINT WINAPI extGetSystemPaletteUse(HDC hdc)
{
UINT res;
OutTraceDW("GDI.GetSystemPaletteUse: hdc=%x\n", hdc);
res=(*pGetSystemPaletteUse)(hdc);
OutTraceDW("GetSystemPaletteUse: res=%x(%s)\n", res, ExplainPaletteUse(res));
return res;
}
//BEWARE: SetPixelFormat must be issued on the same hdc used by OpenGL wglCreateContext, otherwise
// a failure err=2000 ERROR INVALID PIXEL FORMAT occurs!!

View File

@ -20,6 +20,11 @@ BOOL IsChangeDisplaySettingsHotPatched = FALSE;
//BOOL WINAPI extValidateRect(HWND, const RECT *);
//ValidateRect_Type pValidateRect = NULL;
//typedef BOOL (WINAPI *EnumDisplayMonitors_Type)(HDC, LPCRECT, MONITORENUMPROC, LPARAM);
//EnumDisplayMonitors_Type pEnumDisplayMonitors = NULL;
//BOOL WINAPI extEnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM);
static HookEntry_Type Hooks[]={
{HOOK_IAT_CANDIDATE, "UpdateWindow", (FARPROC)NULL, (FARPROC *)&pUpdateWindow, (FARPROC)extUpdateWindow},
//{HOOK_IAT_CANDIDATE, "GetWindowPlacement", (FARPROC)NULL, (FARPROC *)&pGetWindowPlacement, (FARPROC)extGetWindowPlacement},
@ -44,7 +49,7 @@ static HookEntry_Type Hooks[]={
{HOOK_IAT_CANDIDATE, "RegisterClassExA", (FARPROC)RegisterClassExA, (FARPROC *)&pRegisterClassExA, (FARPROC)extRegisterClassExA},
{HOOK_IAT_CANDIDATE, "RegisterClassA", (FARPROC)RegisterClassA, (FARPROC *)&pRegisterClassA, (FARPROC)extRegisterClassA},
{HOOK_HOT_CANDIDATE, "GetSystemMetrics", (FARPROC)GetSystemMetrics, (FARPROC *)&pGetSystemMetrics, (FARPROC)extGetSystemMetrics},
{HOOK_IAT_CANDIDATE, "GetDesktopWindow", (FARPROC)GetDesktopWindow, (FARPROC *)&pGetDesktopWindow, (FARPROC)extGetDesktopWindow},
{HOOK_HOT_CANDIDATE, "GetDesktopWindow", (FARPROC)GetDesktopWindow, (FARPROC *)&pGetDesktopWindow, (FARPROC)extGetDesktopWindow},
{HOOK_IAT_CANDIDATE, "CloseWindow", (FARPROC)NULL, (FARPROC *)&pCloseWindow, (FARPROC)extCloseWindow},
{HOOK_IAT_CANDIDATE, "DestroyWindow", (FARPROC)NULL, (FARPROC *)&pDestroyWindow, (FARPROC)extDestroyWindow},
{HOOK_IAT_CANDIDATE, "SetSysColors", (FARPROC)NULL, (FARPROC *)&pSetSysColors, (FARPROC)extSetSysColors},
@ -60,6 +65,8 @@ static HookEntry_Type Hooks[]={
//{HOOK_HOT_CANDIDATE, "GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow},
//{HOOK_HOT_CANDIDATE, "GetForegroundWindow", (FARPROC)GetForegroundWindow, (FARPROC *)&pGetForegroundWindow, (FARPROC)extGetForegroundWindow},
//{HOOK_IAT_CANDIDATE, "GetWindowTextA", (FARPROC)GetWindowTextA, (FARPROC *)&pGetWindowTextA, (FARPROC)extGetWindowTextA},
//{HOOK_HOT_CANDIDATE, "EnumDisplayMonitors", (FARPROC)EnumDisplayMonitors, (FARPROC *)&pEnumDisplayMonitors, (FARPROC)extEnumDisplayMonitors},
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
};
@ -2756,7 +2763,7 @@ HWND WINAPI extChildWindowFromPointEx(HWND hWndParent, POINT Point, UINT uFlags)
BOOL extGetMonitorInfo(HMONITOR hMonitor, LPMONITORINFO lpmi, GetMonitorInfo_Type pGetMonitorInfo)
{
BOOL res;
OutTrace("GetMonitorInfo: hMonitor=%x mi=MONITORINFO%s\n", hMonitor, lpmi->cbSize==sizeof(MONITORINFO)?"":"EX");
OutTraceDW("GetMonitorInfo: hMonitor=%x mi=MONITORINFO%s\n", hMonitor, lpmi->cbSize==sizeof(MONITORINFO)?"":"EX");
res=(*pGetMonitorInfo)(hMonitor, lpmi);
if(res && dxw.Windowize){
OutTraceDW("GetMonitorInfo: FIX Work=(%d,%d)-(%d,%d) Monitor=(%d,%d)-(%d,%d) -> (%d,%d)-(%d,%d)\n",
@ -2766,6 +2773,9 @@ BOOL extGetMonitorInfo(HMONITOR hMonitor, LPMONITORINFO lpmi, GetMonitorInfo_Typ
lpmi->rcWork = dxw.GetScreenRect();
lpmi->rcMonitor = dxw.GetScreenRect();
}
else
OutTraceE("GetMonitorInfo: ERROR err=%d\n", GetLastError());
return res;
}

View File

@ -72,7 +72,7 @@ void CTabProgram::OnOpen()
extern char *gInitFilePath;
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
cTarget->m_File.GetWindowText(path, MAX_PATH);
GetPrivateProfileString("window", "exepath", ".", path, MAX_PATH, gInitFilePath);
GetPrivateProfileString("window", "exepath", NULL, path, MAX_PATH, gInitFilePath);
CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Program (*.exe)|*.exe|All Files (*.*)|*.*||", this);
if( dlg.DoModal() == IDOK) {

Binary file not shown.