mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_03_32_src
Former-commit-id: 6271822b23e6f239b4b836ead7b6a1abb1fded8e
This commit is contained in:
parent
45dd6cab93
commit
c871525e90
@ -195,6 +195,8 @@
|
|||||||
#define ACTIVATEAPP 0x00000800 // sends WM_ACTIVATEAPP message after every WM_WINPOSCHANGED message
|
#define ACTIVATEAPP 0x00000800 // sends WM_ACTIVATEAPP message after every WM_WINPOSCHANGED message
|
||||||
#define NOSYSMEMPRIMARY 0x00001000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated primary surface
|
#define NOSYSMEMPRIMARY 0x00001000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated primary surface
|
||||||
#define NOSYSMEMBACKBUF 0x00002000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated backbuffer surface
|
#define NOSYSMEMBACKBUF 0x00002000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated backbuffer surface
|
||||||
|
#define CONFIRMONCLOSE 0x00004000 // on close button, ask the user before closing the window / terminating the program
|
||||||
|
#define TERMINATEONCLOSE 0x00008000 // on WM_CLOSE message, also terminates the program
|
||||||
|
|
||||||
// logging Tflags DWORD:
|
// logging Tflags DWORD:
|
||||||
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
|
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:549536858a03ba659d55078a89d987c435aed391c5444cfe6421f23cf4c76cc6
|
oid sha256:801f4eac2532d06296db4f257f4b14b6d58d6e6729a7df14a5c73407cbfbb3a5
|
||||||
size 578048
|
size 578560
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:ec489528e5cb8f0bdcdd15b49650a55d6367c38520bc1724834cebef642c9d73
|
oid sha256:298792319c4f1da616431a5ac3e9cbd4ae54c82335a70f27affa029e8f0b3183
|
||||||
size 541696
|
size 541696
|
||||||
|
@ -861,3 +861,9 @@ fix: revised the DDSCAPS_SYSTEMMEMORY suppression, now separated for primary & b
|
|||||||
v2.03.31:
|
v2.03.31:
|
||||||
fix: handling of "No SYSTEMMEMORY on BackBuffer" flag for no-emulation mode: necessary to run "Microsoft Motocross Madness 2" in this mode.
|
fix: handling of "No SYSTEMMEMORY on BackBuffer" flag for no-emulation mode: necessary to run "Microsoft Motocross Madness 2" in this mode.
|
||||||
fix: allowing hot patching to GetCursorPos() user32.dll call. This allows correct mouse control with obfuscated exes, like the chinese RPG "Paladin 3".
|
fix: allowing hot patching to GetCursorPos() user32.dll call. This allows correct mouse control with obfuscated exes, like the chinese RPG "Paladin 3".
|
||||||
|
|
||||||
|
v2.03.32:
|
||||||
|
add: flags "Ask confirmation on window close" and "Terminate on window close"
|
||||||
|
fix: implemented surface stack cleanup on overflow: this should allow "European Air War" to run through several seasons.
|
||||||
|
debug: added a few diagnostic messages to trap possible errors in DLL injection functions
|
||||||
|
fix: recovered the menu Edit->Add command that went disabled
|
||||||
|
@ -22,18 +22,31 @@ BOOL Inject(DWORD pID, const char * DLL_NAME)
|
|||||||
if(!pID) return false;
|
if(!pID) return false;
|
||||||
//hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); // not working on Win XP
|
//hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); // not working on Win XP
|
||||||
hProc = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, pID);
|
hProc = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, pID);
|
||||||
if(!hProc)
|
if(!hProc){
|
||||||
{
|
|
||||||
sprintf(buf, "OpenProcess() failed: pid=%x err=%d", pID, GetLastError());
|
sprintf(buf, "OpenProcess() failed: pid=%x err=%d", pID, GetLastError());
|
||||||
MessageBox(NULL, buf, "Loader", MB_OK);
|
MessageBox(NULL, buf, "Loader", MB_OK);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
hLib=GetModuleHandle("kernel32.dll");
|
hLib=GetModuleHandle("kernel32.dll");
|
||||||
|
if(!hLib){
|
||||||
|
sprintf(buf, "GetModuleHandle(\"kernel32.dll\") failed: err=%d", pID, GetLastError());
|
||||||
|
MessageBox(NULL, buf, "Loader", MB_OK);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
LoadLibAddy = (LPVOID)GetProcAddress(hLib, "LoadLibraryA");
|
LoadLibAddy = (LPVOID)GetProcAddress(hLib, "LoadLibraryA");
|
||||||
|
if(!LoadLibAddy){
|
||||||
|
sprintf(buf, "GetProcAddress(\"LoadLibraryA\") failed: err=%d", pID, GetLastError());
|
||||||
|
MessageBox(NULL, buf, "Loader", MB_OK);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
// Allocate space in the process for the DLL
|
// Allocate space in the process for the DLL
|
||||||
RemoteString = (LPVOID)VirtualAllocEx(hProc, NULL, strlen(DLL_NAME), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
|
RemoteString = (LPVOID)VirtualAllocEx(hProc, NULL, strlen(DLL_NAME), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
|
||||||
// Write the string name of the DLL in the memory allocated
|
// Write the string name of the DLL in the memory allocated
|
||||||
WriteProcessMemory(hProc, (LPVOID)RemoteString, DLL_NAME, strlen(DLL_NAME), NULL);
|
if(!WriteProcessMemory(hProc, (LPVOID)RemoteString, DLL_NAME, strlen(DLL_NAME), NULL)){
|
||||||
|
sprintf(buf, "WriteProcessMemory() failed: err=%d", pID, GetLastError());
|
||||||
|
MessageBox(NULL, buf, "Loader", MB_OK);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
// Load the DLL
|
// Load the DLL
|
||||||
hThread=CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, 0, NULL);
|
hThread=CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, 0, NULL);
|
||||||
// Free/Release/Close everything
|
// Free/Release/Close everything
|
||||||
|
@ -1060,20 +1060,17 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
if (dxw.dwFlags1 & CLIPCURSOR) dxw.EraseClipCursor();
|
if (dxw.dwFlags1 & CLIPCURSOR) dxw.EraseClipCursor();
|
||||||
if (dxw.dwFlags1 & ENABLECLIPPING) (*pClipCursor)(NULL);
|
if (dxw.dwFlags1 & ENABLECLIPPING) (*pClipCursor)(NULL);
|
||||||
break;
|
break;
|
||||||
case WM_QUIT:
|
|
||||||
case WM_DESTROY:
|
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
if(dxw.dwFlags6 & HIDETASKBAR){
|
// Beware: closing main window does not always mean that the program is about to terminate!!!
|
||||||
extern void gShowHideTaskBar(BOOL);
|
extern void gShowHideTaskBar(BOOL);
|
||||||
gShowHideTaskBar(FALSE);
|
if(dxw.dwFlags6 & CONFIRMONCLOSE){
|
||||||
}
|
OutTraceDW("WindowProc: WM_CLOSE - terminating process?\n");
|
||||||
|
if (MessageBoxA(NULL, "Do you really want to exit the game?", "DxWnd", MB_YESNO | MB_TASKMODAL) != IDYES) return FALSE;
|
||||||
|
}
|
||||||
|
if(dxw.dwFlags6 & HIDETASKBAR) gShowHideTaskBar(FALSE);
|
||||||
|
if(dxw.dwFlags3 & FORCE16BPP) RecoverScreenMode();
|
||||||
|
if(dxw.dwFlags6 & TERMINATEONCLOSE) TerminateProcess(GetCurrentProcess(),0);
|
||||||
break;
|
break;
|
||||||
// commented out: WM_CLOSE just issue a request to close the window, not the process! It should be WM_QUIT....
|
|
||||||
//case WM_CLOSE:
|
|
||||||
// OutTraceDW("WindowProc: WM_CLOSE - terminating process\n");
|
|
||||||
// if(dxw.dwFlags3 & FORCE16BPP) RecoverScreenMode();
|
|
||||||
// TerminateProcess(GetCurrentProcess(),0);
|
|
||||||
// break;
|
|
||||||
case WM_SYSKEYDOWN:
|
case WM_SYSKEYDOWN:
|
||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
if(!(dxw.dwFlags4 & ENABLEHOTKEYS)) break;
|
if(!(dxw.dwFlags4 & ENABLEHOTKEYS)) break;
|
||||||
|
@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#include "TlHelp32.h"
|
#include "TlHelp32.h"
|
||||||
|
|
||||||
#define VERSION "2.03.31"
|
#define VERSION "2.03.32"
|
||||||
|
|
||||||
#define DDTHREADLOCK 1
|
#define DDTHREADLOCK 1
|
||||||
//#define LOCKTHREADS
|
//#define LOCKTHREADS
|
||||||
|
Binary file not shown.
@ -9,6 +9,7 @@
|
|||||||
#include "dxwcore.hpp"
|
#include "dxwcore.hpp"
|
||||||
|
|
||||||
//#define DXW_SURFACE_STACK_TRACING
|
//#define DXW_SURFACE_STACK_TRACING
|
||||||
|
//#define OutTraceSDB OutTrace
|
||||||
|
|
||||||
dxwSStack::dxwSStack()
|
dxwSStack::dxwSStack()
|
||||||
{
|
{
|
||||||
@ -126,8 +127,10 @@ void dxwSStack::PushSurface(LPDIRECTDRAWSURFACE ps, USHORT role, USHORT version)
|
|||||||
if ((e->lpdds==ps) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list
|
if ((e->lpdds==ps) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list
|
||||||
}
|
}
|
||||||
if(i == DDSQLEN) {
|
if(i == DDSQLEN) {
|
||||||
MessageBox(0, "Surface stack is full", "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION);
|
//MessageBox(0, "Surface stack is full", "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION);
|
||||||
return;
|
//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];
|
||||||
}
|
}
|
||||||
e->lpdds=ps;
|
e->lpdds=ps;
|
||||||
e->uRole = role;
|
e->uRole = role;
|
||||||
|
@ -37,14 +37,14 @@ void CTabProgram::DoDataExchange(CDataExchange* pDX)
|
|||||||
DDX_Check(pDX, IDC_WINDOWIZE, cTarget->m_Windowize);
|
DDX_Check(pDX, IDC_WINDOWIZE, cTarget->m_Windowize);
|
||||||
DDX_Check(pDX, IDC_HOTPATCH, cTarget->m_HotPatch);
|
DDX_Check(pDX, IDC_HOTPATCH, cTarget->m_HotPatch);
|
||||||
DDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs);
|
DDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs);
|
||||||
|
DDX_Check(pDX, IDC_CONFIRMONCLOSE, cTarget->m_ConfirmOnClose);
|
||||||
|
DDX_Check(pDX, IDC_TERMINATEONCLOSE, cTarget->m_TerminateOnClose);
|
||||||
DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly);
|
DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly);
|
||||||
DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin);
|
DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin);
|
||||||
DDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled);
|
DDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled);
|
||||||
DDX_Check(pDX, IDC_STARTDEBUG, cTarget->m_StartDebug);
|
DDX_Check(pDX, IDC_STARTDEBUG, cTarget->m_StartDebug);
|
||||||
DDX_Check(pDX, IDC_CLIENTREMAPPING, cTarget->m_ClientRemapping);
|
|
||||||
DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad);
|
DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad);
|
||||||
DDX_Check(pDX, IDC_KEEPASPECTRATIO, cTarget->m_KeepAspectRatio);
|
DDX_Check(pDX, IDC_KEEPASPECTRATIO, cTarget->m_KeepAspectRatio);
|
||||||
DDX_Check(pDX, IDC_HOOKOPENGL, cTarget->m_HookOpenGL); // duplicated
|
|
||||||
DDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner);
|
DDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner);
|
||||||
DDX_Text(pDX, IDC_POSX, cTarget->m_PosX);
|
DDX_Text(pDX, IDC_POSX, cTarget->m_PosX);
|
||||||
DDX_Text(pDX, IDC_POSY, cTarget->m_PosY);
|
DDX_Text(pDX, IDC_POSY, cTarget->m_PosY);
|
||||||
|
@ -28,10 +28,12 @@ void CTabSysLibs::DoDataExchange(CDataExchange* pDX)
|
|||||||
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
|
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
|
||||||
|
|
||||||
// GDI
|
// GDI
|
||||||
|
DDX_Check(pDX, IDC_CLIENTREMAPPING, cTarget->m_ClientRemapping);
|
||||||
DDX_Radio(pDX, IDC_GDINONE, cTarget->m_DCEmulationMode);
|
DDX_Radio(pDX, IDC_GDINONE, cTarget->m_DCEmulationMode);
|
||||||
DDX_Check(pDX, IDC_FIXTEXTOUT, cTarget->m_FixTextOut);
|
DDX_Check(pDX, IDC_FIXTEXTOUT, cTarget->m_FixTextOut);
|
||||||
|
|
||||||
// OpenGL
|
// OpenGL
|
||||||
|
DDX_Check(pDX, IDC_HOOKOPENGL, cTarget->m_HookOpenGL); // duplicated
|
||||||
DDX_Check(pDX, IDC_FORCEHOOKOPENGL, cTarget->m_ForceHookOpenGL);
|
DDX_Check(pDX, IDC_FORCEHOOKOPENGL, cTarget->m_ForceHookOpenGL);
|
||||||
DDX_Text(pDX, IDC_OPENGLLIB, cTarget->m_OpenGLLib);
|
DDX_Text(pDX, IDC_OPENGLLIB, cTarget->m_OpenGLLib);
|
||||||
|
|
||||||
|
@ -87,6 +87,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
|||||||
m_Windowize = TRUE; // default true !!
|
m_Windowize = TRUE; // default true !!
|
||||||
m_HotPatch = FALSE;
|
m_HotPatch = FALSE;
|
||||||
m_HookDLLs = TRUE; // default true !!
|
m_HookDLLs = TRUE; // default true !!
|
||||||
|
m_TerminateOnClose = FALSE; // default true !!
|
||||||
|
m_ConfirmOnClose = FALSE; // default true !!
|
||||||
m_HookEnabled = TRUE; // default true !!
|
m_HookEnabled = TRUE; // default true !!
|
||||||
m_EmulateRegistry = FALSE;
|
m_EmulateRegistry = FALSE;
|
||||||
m_OverrideRegistry = FALSE;
|
m_OverrideRegistry = FALSE;
|
||||||
|
@ -55,6 +55,8 @@ public:
|
|||||||
BOOL m_Windowize;
|
BOOL m_Windowize;
|
||||||
BOOL m_HotPatch;
|
BOOL m_HotPatch;
|
||||||
BOOL m_HookDLLs;
|
BOOL m_HookDLLs;
|
||||||
|
BOOL m_TerminateOnClose;
|
||||||
|
BOOL m_ConfirmOnClose;
|
||||||
BOOL m_EmulateRegistry;
|
BOOL m_EmulateRegistry;
|
||||||
BOOL m_OverrideRegistry;
|
BOOL m_OverrideRegistry;
|
||||||
BOOL m_Wow64Registry;
|
BOOL m_Wow64Registry;
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -108,6 +108,7 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
|
|||||||
ON_COMMAND(ID_TASKBAR_HIDE, OnTaskbarHide)
|
ON_COMMAND(ID_TASKBAR_HIDE, OnTaskbarHide)
|
||||||
ON_COMMAND(ID_TASKBAR_SHOW, OnTaskbarShow)
|
ON_COMMAND(ID_TASKBAR_SHOW, OnTaskbarShow)
|
||||||
ON_COMMAND(ID_MODIFY, OnModify)
|
ON_COMMAND(ID_MODIFY, OnModify)
|
||||||
|
ON_COMMAND(ID_ADD, OnAdd)
|
||||||
ON_COMMAND(ID_PEXPORT, OnExport)
|
ON_COMMAND(ID_PEXPORT, OnExport)
|
||||||
ON_COMMAND(ID_PKILL, OnProcessKill)
|
ON_COMMAND(ID_PKILL, OnProcessKill)
|
||||||
ON_COMMAND(ID_FILE_IMPORT, OnImport)
|
ON_COMMAND(ID_FILE_IMPORT, OnImport)
|
||||||
@ -174,6 +175,8 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
if(dlg->m_UnNotify) t->flags |= UNNOTIFY;
|
if(dlg->m_UnNotify) t->flags |= UNNOTIFY;
|
||||||
if(dlg->m_Windowize) t->flags2 |= WINDOWIZE;
|
if(dlg->m_Windowize) t->flags2 |= WINDOWIZE;
|
||||||
if(dlg->m_HookDLLs) t->flags3 |= HOOKDLLS;
|
if(dlg->m_HookDLLs) t->flags3 |= HOOKDLLS;
|
||||||
|
if(dlg->m_TerminateOnClose) t->flags6 |= TERMINATEONCLOSE;
|
||||||
|
if(dlg->m_ConfirmOnClose) t->flags6 |= CONFIRMONCLOSE;
|
||||||
if(dlg->m_EmulateRegistry) t->flags3 |= EMULATEREGISTRY;
|
if(dlg->m_EmulateRegistry) t->flags3 |= EMULATEREGISTRY;
|
||||||
if(dlg->m_OverrideRegistry) t->flags4 |= OVERRIDEREGISTRY;
|
if(dlg->m_OverrideRegistry) t->flags4 |= OVERRIDEREGISTRY;
|
||||||
if(dlg->m_Wow64Registry) t->flags6 |= WOW64REGISTRY;
|
if(dlg->m_Wow64Registry) t->flags6 |= WOW64REGISTRY;
|
||||||
@ -414,6 +417,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
dlg->m_Windowize = t->flags2 & WINDOWIZE ? 1 : 0;
|
dlg->m_Windowize = t->flags2 & WINDOWIZE ? 1 : 0;
|
||||||
dlg->m_HotPatch = t->flags4 & HOTPATCH ? 1 : 0;
|
dlg->m_HotPatch = t->flags4 & HOTPATCH ? 1 : 0;
|
||||||
dlg->m_HookDLLs = t->flags3 & HOOKDLLS ? 1 : 0;
|
dlg->m_HookDLLs = t->flags3 & HOOKDLLS ? 1 : 0;
|
||||||
|
dlg->m_TerminateOnClose = t->flags6 & TERMINATEONCLOSE ? 1 : 0;
|
||||||
|
dlg->m_ConfirmOnClose = t->flags6 & CONFIRMONCLOSE ? 1 : 0;
|
||||||
dlg->m_EmulateRegistry = t->flags3 & EMULATEREGISTRY ? 1 : 0;
|
dlg->m_EmulateRegistry = t->flags3 & EMULATEREGISTRY ? 1 : 0;
|
||||||
dlg->m_OverrideRegistry = t->flags4 & OVERRIDEREGISTRY ? 1 : 0;
|
dlg->m_OverrideRegistry = t->flags4 & OVERRIDEREGISTRY ? 1 : 0;
|
||||||
dlg->m_Wow64Registry = t->flags6 & WOW64REGISTRY ? 1 : 0;
|
dlg->m_Wow64Registry = t->flags6 & WOW64REGISTRY ? 1 : 0;
|
||||||
|
BIN
host/resource
BIN
host/resource
Binary file not shown.
BIN
proxy/ddraw.suo
BIN
proxy/ddraw.suo
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user