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

v2_03_36_src

Former-commit-id: 48168527cfa5375694423fef4183d6e561199859
This commit is contained in:
gho tik 2015-09-09 12:41:24 -04:00 committed by Refael ACkermann
parent c4c0b5877f
commit 56f19f7c42
36 changed files with 459 additions and 81 deletions

View File

@ -200,6 +200,7 @@
#define FLIPEMULATION 0x00010000 // create virtual primary and backbuffer as un-attached surfaces and replace Flip with Blt
#define SETZBUFFERBITDEPTHS 0x00020000 // when not set, set the legacy dwZBufferBitDepths field in the directdraw capability from GetCaps()
#define SHAREDDC 0x00040000 // enable sharing window DC and primary surface DC
#define WOW32REGISTRY 0x00080000 // Sets KEY_WOW32_64KEY registry flag
// logging Tflags DWORD:
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7974a9d6ece70e47422cce4c82daa4d31131c217d89aa967ad23993ba7a3268c
size 583680
oid sha256:f2fe03b12248b3b75bf4e724f83017b2767ac7eaf5f5c25ac2021da81ba9dd23
size 585728

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cd704d7423b954daf34806d31bb047aa8d606752a5fa6cd1f9f602b668c5e5f3
size 542208
oid sha256:482a21422742238d783015f22714a6001eac5a1dc38332c53db686dcd086c7c3
size 544256

View File

@ -0,0 +1,31 @@
[target]
title0=Beetle Crazy Cup
path0=D:\Games\Beetle Crazy Cup\beetle.exe
launchpath0=
module0=
opengllib0=
notes0=
ver0=0
coord0=0
flag0=136314914
flagg0=1207959552
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=327680
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
swapeffect0=0

View File

@ -0,0 +1,32 @@
[target]
title0=Command & Conquer - Red Alert The Aftermath
path0=D:\Games\C&C - Red Alert The Aftermath\RA95.EXE
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=136331362
flagg0=1207959552
flagh0=532
flagi0=138412036
flagj0=4224
flagk0=262144
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
swapeffect0=0

View File

@ -9,7 +9,7 @@ flag0=671088675
flagg0=1207959552
flagh0=20
flagi0=4325380
tflag0=6147
tflag0=0
initx0=0
inity0=0
minx0=0
@ -27,5 +27,6 @@ maxres0=-1
launchpath0=
notes0=
flagj0=128
flagk0=0
flagk0=65536
swapeffect0=0
registry0=

View File

@ -27,5 +27,5 @@ maxres0=-1
launchpath0=
notes0=
flagj0=128
flagk0=0
flagk0=65536
swapeffect0=0

View File

@ -9,7 +9,7 @@ flag0=134217762
flagg0=1207959552
flagh0=20
flagi0=4194308
tflag0=6146
tflag0=0
initx0=0
inity0=0
minx0=0
@ -27,3 +27,6 @@ maxres0=-1
launchpath0=
notes0=
flagj0=128
registry0=
flagk0=65536
swapeffect0=0

View File

@ -26,3 +26,7 @@ winver0=0
maxres0=-1
launchpath0=
flagj0=128
notes0=
registry0=
flagk0=65536
swapeffect0=0

View File

@ -10,7 +10,7 @@ flag0=136331298
flagg0=1207959552
flagh0=20
flagi0=138412036
flagj0=8320
flagj0=128
tflag0=0
initx0=0
inity0=0
@ -26,3 +26,6 @@ maxfps0=0
initts0=0
winver0=0
maxres0=-1
notes0=
flagk0=65536
swapeffect0=0

View File

@ -26,6 +26,6 @@ winver0=0
maxres0=-1
launchpath0=
notes0=
flagj0=162
flagk0=0
flagj0=130
flagk0=73728
swapeffect0=0

View File

@ -5,7 +5,7 @@ module0=
opengllib0=
ver0=0
coord0=0
flag0=134217766
flag0=136314918
flagg0=1207959552
flagh0=20
flagi0=4194308
@ -27,3 +27,5 @@ maxres0=-1
launchpath0=
notes0=
flagj0=128
flagk0=0
swapeffect0=0

View File

@ -0,0 +1,32 @@
[target]
title0=Star Trek Armada
path0=D:\Games\Star Trek Armada\Armada.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=-2011168669
flagg0=1543503872
flagh0=98320
flagi0=136314884
flagj0=4224
flagk0=327680
tflag0=0
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=100
posy0=100
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0

View File

@ -0,0 +1,32 @@
[target]
title0=Star Trek Generations
path0=D:\Games\stgen\sgens.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\MicroProse\Star Trek Generations]\n[HKEY_LOCAL_MACHINE\SOFTWARE\MicroProse\Star Trek Generations\1.0]\n"Path"="D:\\GAMES\\STGEN"\n"CDPath"="F:\\GENS"\n"InstallSet"="MED"\n
ver0=1
coord0=0
flag0=136314978
flagg0=1744830464
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=0
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
swapeffect0=0

View File

@ -27,5 +27,6 @@ initts0=0
winver0=0
maxres0=-1
notes0=
flagk0=0
flagk0=65536
swapeffect0=0
registry0=

View File

@ -887,4 +887,16 @@ fix: the flags for disabling DDSCAPS_SYSTEMMEMORY capability are now used also i
fix: handling of NULL DC in non emulated modes: the NULL DC (corresponding to the whole desktop) is replaced by the window DC. This reduces problems like clearing the whole desktop.
fix: EnumDisplayModes was returning wrong modes list in SVGA mode.
fix: applied the error suppression to the DeleteAttachedSurface hooker.
fix: hooked User32 CreateRectRegion/Indirect calls.
fix: hooked User32 CreateRectRegion/Indirect calls.
v2.03.36:
fix: fixed "fix movies color depth" flag for color depths greater than 8BPP. Fixes the "Horde 2 the Citadel" intro movie.
add: added the "Set KEY_WOW64_32KEY flag" flag to prevent registry redirection for win32 applications
add: virtual registry configuration integrated in DxWnd configuration and exported files
add: hooking of RegEnumValue() call. Useful for "Star trek Generations"
fix: fixed mouse handling through "Message processing" option for child windows. Fixes "Star Trek Armada" mouse problems
fix: fixed GetDC hooker for child windows. Fixes some "Star Trek Armada" graphic problems
fix: CreateCompatibleDC hooker printing wrong error messages in normal conditions
fix: fixed DrawText, DrawTextEx hookers returning wrong RECT structure. Fixes "Star Trek Armada" text placement problems
add: completed log messages for DrawTextEx, CreateDialogParam, DialogBoxParam and CreateDialogIndirectParam

View File

@ -10,6 +10,9 @@
typedef LONG (WINAPI *RegFlushKey_Type)(HKEY);
LONG WINAPI extRegFlushKey(HKEY);
RegFlushKey_Type pRegFlushKey = NULL;
typedef LONG (WINAPI *RegEnumValueA_Type)(HKEY, DWORD, LPTSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD);
LONG WINAPI extRegEnumValueA(HKEY, DWORD, LPTSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD);
RegEnumValueA_Type pRegEnumValueA = NULL;
static HookEntry_Type Hooks[]={
{HOOK_IAT_CANDIDATE, "RegOpenKeyExA", NULL, (FARPROC *)&pRegOpenKeyEx, (FARPROC)extRegOpenKeyEx},
@ -19,6 +22,8 @@ static HookEntry_Type Hooks[]={
{HOOK_IAT_CANDIDATE, "RegCreateKeyExA", NULL, (FARPROC *)&pRegCreateKeyEx, (FARPROC)extRegCreateKeyEx},
{HOOK_IAT_CANDIDATE, "RegSetValueExA", NULL, (FARPROC *)&pRegSetValueEx, (FARPROC)extRegSetValueEx},
{HOOK_IAT_CANDIDATE, "RegFlushKey", NULL, (FARPROC *)&pRegFlushKey, (FARPROC)extRegFlushKey},
// v2.3.36
{HOOK_IAT_CANDIDATE, "RegEnumValueA", NULL, (FARPROC *)&pRegEnumValueA, (FARPROC)extRegEnumValueA},
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
};
@ -152,7 +157,14 @@ LONG WINAPI extRegOpenKeyEx(
if(res == ERROR_SUCCESS) return res;
}
if(dxw.dwFlags6 & WOW64REGISTRY) ulOptions |= KEY_WOW64_64KEY;
if(dxw.dwFlags6 & WOW64REGISTRY){
ulOptions &= ~KEY_WOW64_32KEY;
ulOptions |= KEY_WOW64_64KEY;
}
if(dxw.dwFlags6 & WOW32REGISTRY){
ulOptions &= ~KEY_WOW64_64KEY;
ulOptions |= KEY_WOW64_32KEY;
}
res=(*pRegOpenKeyEx)(hKey, lpSubKey, ulOptions, samDesired, phkResult);
OutTraceR("RegOpenKeyEx: res=%x phkResult=%x\n", res, phkResult ? *phkResult : 0);
@ -368,3 +380,12 @@ LONG WINAPI extRegCreateKey(HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult)
else
return (*pRegCreateKey)(hKey, lpSubKey, phkResult);
}
LONG WINAPI extRegEnumValueA(HKEY hKey, DWORD dwIndex, LPTSTR lpValueName, LPDWORD lpcchValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData)
{
LONG ret;
OutTrace("RegEnumValue: hKey=%x(%s) Index=%x\n", hKey, hKey2String(hKey), dwIndex);
ret=(*pRegEnumValueA)(hKey, dwIndex, lpValueName, lpcchValueName, lpReserved, lpType, lpData, lpcbData);
OutTrace("RegEnumValue: hKey=%x(%s) Index=%x ValueName=\"%s\", Type=%x ret=%x\n", hKey, hKey2String(hKey), dwIndex, lpValueName, lpType ? *lpType : 0, ret);
return ret;
}

View File

@ -109,7 +109,7 @@ static char *Flag6Names[32]={
"SUPPRESSRELEASE", "FIXMOVIESCOLOR", "WOW64REGISTRY", "DISABLEMAXWINMODE",
"FIXPITCH", "POWER2WIDTH", "HIDETASKBAR", "ACTIVATEAPP",
"NOSYSMEMPRIMARY", "NOSYSMEMBACKBUF", "CONFIRMONCLOSE", "TERMINATEONCLOSE",
"FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "",
"FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "WOW32REGISTRY",
"", "", "", "",
"", "", "", "",
"", "", "", "",
@ -1383,6 +1383,7 @@ void HookModule(HMODULE base, int dxversion)
if(dxw.dwFlags4 & HOOKGLIDE) HookGlideLibs(base);
if( (dxw.dwFlags3 & EMULATEREGISTRY) ||
(dxw.dwFlags4 & OVERRIDEREGISTRY) ||
(dxw.dwFlags6 & (WOW32REGISTRY|WOW64REGISTRY)) ||
(dxw.dwTFlags & OUTREGISTRY)) HookAdvApi32(base);
HookMSV4WLibs(base); // -- used by Aliens & Amazons demo: what for?
HookAVIFil32(base);
@ -1485,7 +1486,8 @@ LRESULT CALLBACK MessageHook(int code, WPARAM wParam, LPARAM lParam)
else {
// fix the message point coordinates
POINT upleft={0,0};
(*pClientToScreen)(dxw.GethWnd(), &upleft);
// v2.03.36: offset to be calculated from target window
(*pClientToScreen)(msg->hwnd, &upleft);
msg->pt = dxw.SubCoordinates(msg->pt, upleft);
msg->pt=dxw.FixCursorPos(msg->pt);
// beware: needs fix for mousewheel?

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.35"
#define VERSION "2.03.36"
#define DDTHREADLOCK 1
//#define LOCKTHREADS

Binary file not shown.

View File

@ -715,7 +715,7 @@ HDC WINAPI extGDICreateCompatibleDC(HDC hdc)
SetLastError(0);
RetHdc=(*pGDICreateCompatibleDC)(hdc);
LastError=GetLastError();
if(!LastError)
if(LastError == 0)
OutTraceDW("GDI.CreateCompatibleDC: returning HDC=%x\n", RetHdc);
else
OutTraceE("GDI.CreateCompatibleDC ERROR: err=%d at %d\n", LastError, __LINE__);
@ -756,20 +756,20 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
OutTrace("Debug: DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
}
else if(WindowFromDC(hdcDest)==NULL){
// V2.02.31: See StretchBlt.
int nWDest, nHDest;
nWDest= nWidth;
nHDest= nHeight;
dxw.MapWindow(&nXDest, &nYDest, &nWDest, &nHDest);
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
dxw.ShowOverlay(hdcDest);
OutTrace("Debug: NULL dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
// V2.02.31: See StretchBlt.
int nWDest, nHDest;
nWDest= nWidth;
nHDest= nHeight;
dxw.MapWindow(&nXDest, &nYDest, &nWDest, &nHDest);
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
dxw.ShowOverlay(hdcDest);
OutTrace("Debug: NULL dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
}
else{
res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
OutTrace("Debug: PROXY dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWidth, nHeight);
}
}
else{
res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
OutTrace("Debug: PROXY dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWidth, nHeight);
}
}
else {
res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
OutTrace("Debug: MEM dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWidth, nHeight);

View File

@ -312,6 +312,17 @@ static void Stopper(char *s, int line)
#define STOPPER(s)
#endif
static LPCSTR sTemplateName(LPCSTR tn)
{
static char sBuf[20+1];
if((DWORD)tn >> 16)
return tn;
else {
sprintf(sBuf, "ID:(%x)", ((DWORD)tn & 0x0000FFFF));
return sBuf;
}
}
// --------------------------------------------------------------------------
//
// globals, externs, static functions...
@ -1952,6 +1963,18 @@ static HDC WINAPI sGetDC(HWND hwnd, char *ApiName)
LPDIRECTDRAWSURFACE lpDDSPrim;
lpDDSPrim = dxwss.GetPrimarySurface();
if (lpDDSPrim) (*pGetDC)(lpDDSPrim, &hFlippedDC);
if (!(hwnd == dxw.GethWnd())) {
POINT father, child, offset;
father.x = father.y = 0;
child.x = child.y = 0;
(*pClientToScreen)(dxw.GethWnd(),&father);
(*pClientToScreen)(hwnd,&child);
offset.x = child.x - father.x;
offset.y = child.y - father.y;
dxw.UnmapClient(&offset);
OutTraceDW("%s: child window hwnd=%x offset=(%d,%d)\n", ApiName, hwnd, offset.x, offset.y);
(*pSetViewportOrgEx)(hFlippedDC, offset.x, offset.y, NULL);
}
OutTraceDW("%s: remapping flipped GDI lpDDSPrim=%x hdc=%x\n", ApiName, lpDDSPrim, hFlippedDC);
if(hFlippedDC) return hFlippedDC;
}
@ -2012,6 +2035,7 @@ HDC WINAPI extGDIGetWindowDC(HWND hwnd)
return sGetDC(hwnd, "GDI.GetWindowDC");
}
int WINAPI extGDIReleaseDC(HWND hwnd, HDC hDC)
{
int res;
@ -2120,8 +2144,10 @@ HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpT
HWND RetHWND;
BOOL FullScreen;
FullScreen = dxw.IsFullScreen();
OutTraceDW("CreateDialogIndirectParam: hInstance=%x lpTemplate=%s hWndParent=%x lpDialogFunc=%x lParamInit=%x\n",
hInstance, "tbd", hWndParent, lpDialogFunc, lParamInit);
OutTraceDW("CreateDialogIndirectParam: hInstance=%x lpTemplate=(style=%x extstyle=%x items=%d pos=(%d,%d) size=(%dx%d)) hWndParent=%x lpDialogFunc=%x lParamInit=%x\n",
hInstance,
lpTemplate->style, lpTemplate->dwExtendedStyle, lpTemplate->cdit, lpTemplate->x, lpTemplate->y, lpTemplate->cx, lpTemplate->cy,
hWndParent, lpDialogFunc, lParamInit);
if(dxw.IsFullScreen() && hWndParent==NULL) hWndParent=dxw.GethWnd();
RetHWND=(*pCreateDialogIndirectParam)(hInstance, lpTemplate, hWndParent, lpDialogFunc, lParamInit);
dxw.SetFullScreen(FullScreen);
@ -2143,7 +2169,7 @@ HWND WINAPI extCreateDialogParam(HINSTANCE hInstance, LPCTSTR lpTemplateName, HW
BOOL FullScreen;
FullScreen = dxw.IsFullScreen();
OutTraceDW("CreateDialogParam: hInstance=%x lpTemplateName=%s hWndParent=%x lpDialogFunc=%x lParamInit=%x\n",
hInstance, "tbd", hWndParent, lpDialogFunc, lParamInit);
hInstance, sTemplateName(lpTemplateName), hWndParent, lpDialogFunc, lParamInit);
if(hWndParent==NULL) hWndParent=dxw.GethWnd();
RetHWND=(*pCreateDialogParam)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, lParamInit);
dxw.SetFullScreen(FullScreen);
@ -2354,35 +2380,64 @@ BOOL gFixed;
int WINAPI extDrawTextA(HDC hdc, LPCTSTR lpchText, int nCount, LPRECT lpRect, UINT uFormat)
{
int ret;
BOOL MustScale;
OutTraceDW("DrawText: hdc=%x rect=(%d,%d)-(%d,%d) Format=%x(%s) Text=(%d)\"%s\"\n",
hdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, uFormat, ExplainDTFormat(uFormat), nCount, lpchText);
gFixed = TRUE;
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
MustScale = dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc));
if (MustScale){
dxw.MapClient((RECT *)lpRect);
OutTraceDW("DrawText: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
}
gFixed = TRUE;
ret=(*pDrawText)(hdc, lpchText, nCount, lpRect, uFormat);
gFixed=FALSE;
// if nCount is zero, DrawRect returns 0 as text heigth, but this is not an error! (ref. "Imperialism II")
if(nCount && !ret) OutTraceE("DrawText: ERROR ret=%x err=%d\n", ret, GetLastError());
if (MustScale){
dxw.UnmapClient((RECT *)lpRect);
OutTraceDW("DrawText: fixed output rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
}
return ret;
}
int WINAPI extDrawTextExA(HDC hdc, LPTSTR lpchText, int nCount, LPRECT lpRect, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams)
{
int ret;
BOOL MustScale;
OutTraceDW("DrawTextEx: hdc=%x rect=(%d,%d)-(%d,%d) DTFormat=%x Text=(%d)\"%s\"\n",
hdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, dwDTFormat, nCount, lpchText);
if (IsDebug){
if(lpDTParams)
OutTrace("DTParams: size=%d (L,R)margins=(%d,%d) TabLength=%d lDrawn=%d\n",
lpDTParams->cbSize, lpDTParams->iLeftMargin, lpDTParams->iRightMargin,
lpDTParams->iTabLength, lpDTParams->uiLengthDrawn);
else
OutTrace("DTParams: NULL\n");
}
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
MustScale = dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc));
if (MustScale){
dxw.MapClient((RECT *)lpRect);
OutTraceDW("DrawTextEx: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
}
gFixed = TRUE;
ret=(*pDrawTextEx)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams);
if(!ret) OutTraceE("DrawTextEx: ERROR ret=%x err=%d\n", ret, GetLastError());
gFixed=FALSE;
if(nCount && !ret) OutTraceE("DrawTextEx: ERROR ret=%x err=%d\n", ret, GetLastError());
if (MustScale){
dxw.UnmapClient((RECT *)lpRect);
OutTraceDW("DrawTextEx: fixed output rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
}
return ret;
}
@ -2960,7 +3015,8 @@ INT_PTR WINAPI extDialogBoxParamA(HINSTANCE hInstance, LPCTSTR lpTemplateName, H
{
BOOL ret, FullScreen;
FullScreen = dxw.IsFullScreen();
OutTraceDW("DialogBoxParamA: FullScreen=%x\n", FullScreen);
OutTraceDW("DialogBoxParamA: FullScreen=%x TemplateName=\"%s\" WndParent=%x\n",
FullScreen, sTemplateName(lpTemplateName), hWndParent);
dxw.SetFullScreen(FALSE);
ret = (*pDialogBoxParamA)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, dwInitParam);
dxw.SetFullScreen(FullScreen);

View File

@ -49,6 +49,7 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry);
DDX_Check(pDX, IDC_OVERRIDEREGISTRY, cTarget->m_OverrideRegistry);
DDX_Check(pDX, IDC_WOW64REGISTRY, cTarget->m_Wow64Registry);
DDX_Check(pDX, IDC_WOW32REGISTRY, cTarget->m_Wow32Registry);
}
BEGIN_MESSAGE_MAP(CTabCompat, CDialog)

40
host/TabRegistry.cpp Normal file
View File

@ -0,0 +1,40 @@
// TabRegistry.cpp : implementation file
//
#include "stdafx.h"
#include "TargetDlg.h"
#include "TabRegistry.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTabRegistry dialog
CTabRegistry::CTabRegistry(CWnd* pParent /*=NULL*/)
// : CTargetDlg(pParent)
: CDialog(CTabRegistry::IDD, pParent)
{
//{{AFX_DATA_INIT(CTabRegistry)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CTabRegistry::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
DDX_Text(pDX, IDC_REGISTRY, cTarget->m_Registry);
}
BEGIN_MESSAGE_MAP(CTabRegistry, CDialog)
//{{AFX_MSG_MAP(CTabRegistry)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTabRegistry message handlers

45
host/TabRegistry.h Normal file
View File

@ -0,0 +1,45 @@
#if !defined(AFX_TABNOTES_H__798A9124_C906_446C_822D_322B5AB6F1F1__INCLUDED_)
#define AFX_TABNOTES_H__798A9124_C906_446C_822D_322B5AB6F1F1__INCLUDED_
#include "resource.h"
#include "TargetDlg.h"
/////////////////////////////////////////////////////////////////////////////
// CTabRegistry dialog
//class CTabRegistry : public CTargetDlg
class CTabRegistry : public CDialog
{
// Construction
public:
CTabRegistry(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CTabDirectX)
enum { IDD = IDD_TAB_REGISTRY };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTabDirectX)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//BOOL OnInitDialog();
// Generated message map functions
//{{AFX_MSG(CTabDirectX)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)

View File

@ -99,6 +99,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_EmulateRegistry = FALSE;
m_OverrideRegistry = FALSE;
m_Wow64Registry = FALSE;
m_Wow32Registry = FALSE;
m_FullScreenOnly = FALSE;
m_FilterMessages = FALSE;
m_PeekAllMessages = FALSE;
@ -246,6 +247,8 @@ BOOL CTargetDlg::OnInitDialog()
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_COMPAT, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_REGISTRY, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_NOTES, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_DEBUG, sCaption, sizeof(sCaption));

View File

@ -60,6 +60,7 @@ public:
BOOL m_EmulateRegistry;
BOOL m_OverrideRegistry;
BOOL m_Wow64Registry;
BOOL m_Wow32Registry;
BOOL m_FullScreenOnly;
BOOL m_FilterMessages;
BOOL m_PeekAllMessages;
@ -75,6 +76,7 @@ public:
CString m_Title;
CString m_OpenGLLib;
CString m_Notes;
CString m_Registry;
BOOL m_SaveLoad;
BOOL m_SlowDown;
BOOL m_BlitFromBackBuffer;

View File

@ -31,6 +31,7 @@
#include "TabOpenGL.h"
#include "TabCompat.h"
#include "TabColor.h"
#include "TabRegistry.h"
#include "TabNotes.h"
#include "TabSysLibs.h"
#include "TabDebug.h"
@ -58,6 +59,7 @@ CDXTabCtrl::CDXTabCtrl()
m_tabPages[i++]=new CTabLogs;
m_tabPages[i++]=new CTabSysLibs;
m_tabPages[i++]=new CTabCompat;
m_tabPages[i++]=new CTabRegistry;
m_tabPages[i++]=new CTabNotes;
if (gbDebug) m_tabPages[i++]=new CTabDebug;
@ -85,6 +87,7 @@ void CDXTabCtrl::Init()
m_tabPages[i++]->Create(IDD_TAB_LOG, this);
m_tabPages[i++]->Create(IDD_TAB_SYSLIBS, this);
m_tabPages[i++]->Create(IDD_TAB_COMPAT, this);
m_tabPages[i++]->Create(IDD_TAB_REGISTRY, this);
m_tabPages[i++]->Create(IDD_TAB_NOTES, this);
if (gbDebug) m_tabPages[i++]->Create(IDD_TAB_DEBUG, this);

Binary file not shown.

View File

@ -23,6 +23,7 @@ extern int MessageBoxLangArg(UINT, UINT, UINT, ...);
// the (limited) IPC space and allow for more record entryes (currently 255).
#define MAX_NOTES 1024
#define MAX_REGISTRY 2048
#define MAX_TITLE 80
typedef struct PRIVATEMAP
@ -30,6 +31,7 @@ typedef struct PRIVATEMAP
char title[MAX_TITLE+1];
char launchpath[MAX_PATH+1];
char notes[MAX_NOTES+1];
char registry[MAX_REGISTRY+1];
}PRIVATEMAP;
/////////////////////////////////////////////////////////////////////////////

Binary file not shown.

Binary file not shown.

View File

@ -433,6 +433,10 @@
RelativePath=".\TabProgram.cpp"
>
</File>
<File
RelativePath=".\TabRegistry.cpp"
>
</File>
<File
RelativePath=".\TabSysLibs.cpp"
>
@ -554,6 +558,10 @@
RelativePath=".\TabProgram.h"
>
</File>
<File
RelativePath=".\TabRegistry.h"
>
</File>
<File
RelativePath=".\TabSysLibs.h"
>

View File

@ -45,7 +45,7 @@ char *strnncpy(char *dest, char *src, size_t count)
static char *Escape(char *s)
{
static char tmp[1024];
static char tmp[2048];
char *t = tmp;
for(; *s; s++){
if(*s=='\n'){
@ -66,7 +66,7 @@ static char *Escape(char *s)
static char *Unescape(char *s)
{
static char tmp[1024];
static char tmp[2048];
char *t = tmp;
for(; *s; s++){
if((*s=='\\') && (*(s+1)=='n')){
@ -180,6 +180,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_EmulateRegistry) t->flags3 |= EMULATEREGISTRY;
if(dlg->m_OverrideRegistry) t->flags4 |= OVERRIDEREGISTRY;
if(dlg->m_Wow64Registry) t->flags6 |= WOW64REGISTRY;
if(dlg->m_Wow32Registry) t->flags6 |= WOW32REGISTRY;
if(dlg->m_HookEnabled) t->flags3 |= HOOKENABLED;
if(dlg->m_NoBanner) t->flags2 |= NOBANNER;
if(dlg->m_StartDebug) t->flags2 |= STARTDEBUG;
@ -425,6 +426,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_EmulateRegistry = t->flags3 & EMULATEREGISTRY ? 1 : 0;
dlg->m_OverrideRegistry = t->flags4 & OVERRIDEREGISTRY ? 1 : 0;
dlg->m_Wow64Registry = t->flags6 & WOW64REGISTRY ? 1 : 0;
dlg->m_Wow32Registry = t->flags6 & WOW32REGISTRY ? 1 : 0;
dlg->m_HookEnabled = t->flags3 & HOOKENABLED ? 1 : 0;
dlg->m_NoBanner = t->flags2 & NOBANNER ? 1 : 0;
dlg->m_StartDebug = t->flags2 & STARTDEBUG ? 1 : 0;
@ -652,6 +654,8 @@ static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i,
WritePrivateProfileString("target", key, TargetMap->OpenGLLib, InitPath);
sprintf_s(key, sizeof(key), "notes%i", i);
WritePrivateProfileString("target", key, Escape(PrivateMap->notes), InitPath);
sprintf_s(key, sizeof(key), "registry%i", i);
WritePrivateProfileString("target", key, Escape(PrivateMap->registry), InitPath);
sprintf_s(key, sizeof(key), "ver%i", i);
sprintf_s(val, sizeof(val), "%i", TargetMap->dxversion);
WritePrivateProfileString("target", key, val, InitPath);
@ -785,6 +789,8 @@ static void ClearTarget(int i, char *InitPath)
WritePrivateProfileString("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "notes%i", i);
WritePrivateProfileString("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "registry%i", i);
WritePrivateProfileString("target", key, 0, InitPath);
}
static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, char *InitPath)
@ -805,6 +811,9 @@ static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, c
sprintf_s(key, sizeof(key), "notes%i", i);
GetPrivateProfileString("target", key, "", PrivateMap->notes, MAX_NOTES, InitPath);
strcpy(PrivateMap->notes, Unescape(PrivateMap->notes));
sprintf_s(key, sizeof(key), "registry%i", i);
GetPrivateProfileString("target", key, "", PrivateMap->registry, MAX_NOTES, InitPath);
strcpy(PrivateMap->registry, Unescape(PrivateMap->registry));
sprintf_s(key, sizeof(key), "ver%i", i);
TargetMap->dxversion = GetPrivateProfileInt("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "coord%i", i);
@ -887,7 +896,7 @@ void CDxwndhostView::SaveConfigFile()
for(i = 0; i < MAXTARGETS; i ++){
if(!TargetMaps[i].path[0]) break;
SaveConfigItem(&TargetMaps[i], &TitleMaps[i], i, InitPath);
SaveConfigItem(&TargetMaps[i], &PrivateMaps[i], i, InitPath);
}
for(; i < MAXTARGETS; i ++) ClearTarget(i, InitPath);
this->isUpdated=FALSE;
@ -977,17 +986,17 @@ void CDxwndhostView::OnInitialUpdate()
listctrl.InsertColumn(0, &listcol);
for(i = 0; i < MAXTARGETS; i ++){
if (!LoadConfigItem(&TargetMaps[i], &TitleMaps[i], i, InitPath)) break;
if (!LoadConfigItem(&TargetMaps[i], &PrivateMaps[i], i, InitPath)) break;
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.pszText = TitleMaps[i].title;
listitem.pszText = PrivateMaps[i].title;
listitem.iImage = SetTargetIcon(TargetMaps[i]);
listctrl.InsertItem(&listitem);
}
for(; i < MAXTARGETS; i ++) {
TargetMaps[i].path[0] = 0;
TitleMaps[i].title[0] = 0;
PrivateMaps[i].title[0] = 0;
}
Resize();
SetTarget(TargetMaps);
@ -997,7 +1006,7 @@ void CDxwndhostView::OnInitialUpdate()
this->OnHookStop();
if(m_StartToTray) this->OnGoToTrayIcon();
this->isUpdated=FALSE;
pTitles = &TitleMaps[0];
pTitles = &PrivateMaps[0];
pTargets= &TargetMaps[0];
}
@ -1043,7 +1052,7 @@ void CDxwndhostView::OnExport()
i = listctrl.GetNextSelectedItem(pos);
GetPrivateProfileString("window", "exportpath", NULL, path, MAX_PATH, InitPath);
//strcat_s(path, MAX_PATH, "\\");
strcat_s(path, MAX_PATH, TitleMaps[i].title);
strcat_s(path, MAX_PATH, PrivateMaps[i].title);
CFileDialog dlg( FALSE, "*.dxw", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"dxwnd task config (*.dxw)|*.dxw|All Files (*.*)|*.*||", this);
if( dlg.DoModal() == IDOK) {
@ -1055,7 +1064,7 @@ void CDxwndhostView::OnExport()
TargetMap = &TargetMaps[i];
TFlags = TargetMap->tflags;
TargetMap->tflags = 0;
SaveConfigItem(&TargetMaps[i], &TitleMaps[i], 0, path);
SaveConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, path);
TargetMap->tflags = TFlags;
if(GetPrivateProfileInt("window", "updatepaths", 1, InitPath)) {
GetFolderFromPath(path);
@ -1095,12 +1104,12 @@ void CDxwndhostView::OnImport()
if(ImportExportPath[ofn.nFileOffset - 1] != '\0'){
// Single-Select
// "buffer" - name of file
if(LoadConfigItem(&TargetMaps[i], &TitleMaps[i], 0, ImportExportPath)){
if(LoadConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, ImportExportPath)){
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.iImage = SetTargetIcon(TargetMaps[i]);
listitem.pszText = TitleMaps[i].title;
listitem.pszText = PrivateMaps[i].title;
listctrl.InsertItem(&listitem);
if(GetPrivateProfileInt("window", "updatepaths", 1, InitPath)) {
GetFolderFromPath(ImportExportPath);
@ -1122,12 +1131,12 @@ void CDxwndhostView::OnImport()
if(i==MAXTARGETS) break;
strcpy(pathname, folder);
strcat(pathname, p);
if (LoadConfigItem(&TargetMaps[i], &TitleMaps[i], 0, pathname)){
if (LoadConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, pathname)){
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.iImage = SetTargetIcon(TargetMaps[i]);
listitem.pszText = TitleMaps[i].title;
listitem.pszText = PrivateMaps[i].title;
listctrl.InsertItem(&listitem);
i++;
}
@ -1151,21 +1160,23 @@ void CDxwndhostView::OnModify()
if(!listctrl.GetSelectedCount()) return;
pos = listctrl.GetFirstSelectedItemPosition();
i = listctrl.GetNextSelectedItem(pos);
dlg.m_Title = TitleMaps[i].title;
dlg.m_Notes = TitleMaps[i].notes;
dlg.m_LaunchPath = TitleMaps[i].launchpath;
dlg.m_Title = PrivateMaps[i].title;
dlg.m_Notes = PrivateMaps[i].notes;
dlg.m_Registry = PrivateMaps[i].registry;
dlg.m_LaunchPath = PrivateMaps[i].launchpath;
SetDlgFromTarget(&TargetMaps[i], &dlg);
if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){
strnncpy(TitleMaps[i].title, (char *)dlg.m_Title.GetString(), MAX_TITLE);
strnncpy(TitleMaps[i].notes, (char *)dlg.m_Notes.GetString(), MAX_NOTES);
strnncpy(TitleMaps[i].launchpath, (char *)dlg.m_LaunchPath.GetString(), MAX_PATH);
strnncpy(PrivateMaps[i].title, (char *)dlg.m_Title.GetString(), MAX_TITLE);
strnncpy(PrivateMaps[i].notes, (char *)dlg.m_Notes.GetString(), MAX_NOTES);
strnncpy(PrivateMaps[i].registry, (char *)dlg.m_Registry.GetString(), MAX_REGISTRY);
strnncpy(PrivateMaps[i].launchpath, (char *)dlg.m_LaunchPath.GetString(), MAX_PATH);
SetTargetFromDlg(&TargetMaps[i], &dlg);
CListCtrl& listctrl = GetListCtrl();
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.iImage = SetTargetIcon(TargetMaps[i]);
listitem.pszText = TitleMaps[i].title;
listitem.pszText = PrivateMaps[i].title;
listctrl.SetItem(&listitem);
Resize();
SetTarget(TargetMaps);
@ -1269,6 +1280,31 @@ void CDxwndhostView::OnDebugView()
CloseHandle(pinfo.hThread);
}
void CDxwndhostView::OnSetRegistry()
{
int i;
CTargetDlg dlg;
POSITION pos;
CString Registry;
FILE *regfp;
CListCtrl& listctrl = GetListCtrl();
if(!listctrl.GetSelectedCount()) return;
pos = listctrl.GetFirstSelectedItemPosition();
i = listctrl.GetNextSelectedItem(pos);
Registry = PrivateMaps[i].registry;
regfp=fopen("dxwnd.reg", "w");
if(regfp==NULL){
MessageBox("Error writing virtual registry file", "Error", MB_ICONERROR|MB_OK);
return;
}
fwrite(Registry.GetString(), Registry.GetLength(), 1, regfp);
fclose(regfp);
}
#define strcasecmp lstrcmpi
void CDxwndhostView::OnSort()
@ -1294,14 +1330,14 @@ void CDxwndhostView::OnSort()
while(swapped){
swapped=0;
for(i=0; i<itemcount-1; i++){
if(strcasecmp(TitleMaps[i].title, TitleMaps[i+1].title)>0){
if(strcasecmp(PrivateMaps[i].title, PrivateMaps[i+1].title)>0){
// swap entries
MapEntry=TargetMaps[i];
TargetMaps[i]=TargetMaps[i+1];
TargetMaps[i+1]=MapEntry;
TitEntry=TitleMaps[i];
TitleMaps[i]=TitleMaps[i+1];
TitleMaps[i+1]=TitEntry;
TitEntry=PrivateMaps[i];
PrivateMaps[i]=PrivateMaps[i+1];
PrivateMaps[i+1]=TitEntry;
swapped=1;
}
}
@ -1314,7 +1350,7 @@ void CDxwndhostView::OnSort()
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.iImage = SetTargetIcon(TargetMaps[i]);
listitem.pszText = TitleMaps[i].title;
listitem.pszText = PrivateMaps[i].title;
listctrl.SetItem(&listitem);
listctrl.InsertItem(&listitem);
}
@ -1376,7 +1412,7 @@ void CDxwndhostView::OnPause()
}
else {
wchar_t *wcstring = new wchar_t[48+1];
mbstowcs_s(NULL, wcstring, 48, TitleMaps[DxWndStatus.TaskIdx].title, _TRUNCATE);
mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.TaskIdx].title, _TRUNCATE);
res=MessageBoxLangArg(DXW_STRING_PAUSETASK, DXW_STRING_INFO, MB_YESNO | MB_ICONQUESTION, wcstring);
if(res!=IDYES) return;
PauseResumeThreadList(DxWndStatus.dwPid, FALSE);
@ -1393,7 +1429,7 @@ void CDxwndhostView::OnResume()
}
else {
wchar_t *wcstring = new wchar_t[48+1];
mbstowcs_s(NULL, wcstring, 48, TitleMaps[DxWndStatus.TaskIdx].title, _TRUNCATE);
mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.TaskIdx].title, _TRUNCATE);
res=MessageBoxLangArg(DXW_STRING_RESUMETASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring);
if(res!=IDYES) return;
PauseResumeThreadList(DxWndStatus.dwPid, TRUE);
@ -1447,7 +1483,7 @@ void CDxwndhostView::OnKill()
}
else {
wchar_t *wcstring = new wchar_t[48+1];
mbstowcs_s(NULL, wcstring, 48, TitleMaps[DxWndStatus.TaskIdx].title, _TRUNCATE);
mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.TaskIdx].title, _TRUNCATE);
res=MessageBoxLangArg(DXW_STRING_KILLTASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring);
if(res!=IDYES) return;
DxWndStatus.dwPid;
@ -1487,7 +1523,7 @@ void CDxwndhostView::OnProcessKill()
if(!KillProcByName(lpProcName, FALSE)){
wchar_t *wcstring = new wchar_t[48+1];
mbstowcs_s(NULL, wcstring, 48, TitleMaps[i].title, _TRUNCATE);
mbstowcs_s(NULL, wcstring, 48, PrivateMaps[i].title, _TRUNCATE);
res=MessageBoxLangArg(DXW_STRING_KILLTASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring);
if(res!=IDYES) return;
KillProcByName(lpProcName, TRUE);
@ -1514,24 +1550,25 @@ void CDxwndhostView::OnAdd()
}
memset(&TargetMaps[i],0,sizeof(TARGETMAP)); // clean up, just in case....
if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){
strnncpy(TitleMaps[i].title, (char *)dlg.m_Title.GetString(), MAX_TITLE);
strnncpy(TitleMaps[i].notes, (char *)dlg.m_Notes.GetString(), MAX_NOTES);
strnncpy(TitleMaps[i].launchpath, (char *)dlg.m_LaunchPath.GetString(), MAX_PATH);
strnncpy(PrivateMaps[i].title, (char *)dlg.m_Title.GetString(), MAX_TITLE);
strnncpy(PrivateMaps[i].notes, (char *)dlg.m_Notes.GetString(), MAX_NOTES);
strnncpy(PrivateMaps[i].registry, (char *)dlg.m_Registry.GetString(), MAX_REGISTRY);
strnncpy(PrivateMaps[i].launchpath, (char *)dlg.m_LaunchPath.GetString(), MAX_PATH);
SetTargetFromDlg(&TargetMaps[i], &dlg);
CListCtrl& listctrl = GetListCtrl();
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.iImage = SetTargetIcon(TargetMaps[i]);
if (strlen(TitleMaps[i].title)==0){
if (strlen(PrivateMaps[i].title)==0){
int len;
CString FilePath;
FilePath=TargetMaps[i].path;
len=FilePath.ReverseFind('\\');
FilePath=FilePath.Right(FilePath.GetLength()-len-1);
strncpy_s(TitleMaps[i].title, sizeof(TitleMaps[i].title), FilePath.GetString(), sizeof(TitleMaps[i].title)-1);
strncpy_s(PrivateMaps[i].title, sizeof(PrivateMaps[i].title), FilePath.GetString(), sizeof(PrivateMaps[i].title)-1);
}
listitem.pszText = TitleMaps[i].title;
listitem.pszText = PrivateMaps[i].title;
listctrl.InsertItem(&listitem);
Resize();
SetTarget(TargetMaps);
@ -1551,7 +1588,7 @@ void CDxwndhostView::OnDelete()
pos = listctrl.GetFirstSelectedItemPosition();
i = listctrl.GetNextSelectedItem(pos);
FilePath=TitleMaps[i].title;
FilePath=PrivateMaps[i].title;
if (FilePath.GetLength()==0){
FilePath = TargetMaps[i].path;
len=FilePath.ReverseFind('\\');
@ -1565,7 +1602,7 @@ void CDxwndhostView::OnDelete()
if(res!=IDYES) return;
listctrl.DeleteItem(i);
for(; i < MAXTARGETS - 1; i ++) {
TitleMaps[i] = TitleMaps[i + 1]; // V2.1.74 fix
PrivateMaps[i] = PrivateMaps[i + 1]; // V2.1.74 fix
TargetMaps[i] = TargetMaps[i + 1];
}
Resize();
@ -1771,7 +1808,7 @@ void CDxwndhostView::Resize()
for(i = 0; i < MAXTARGETS; i ++){
if(strlen(TargetMaps[i].path) == 0) break;
tmp = listctrl.GetStringWidth(TitleMaps[i].title);
tmp = listctrl.GetStringWidth(PrivateMaps[i].title);
if(size < tmp) size = tmp;
}
@ -1813,6 +1850,9 @@ void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point)
case ID_PLOG_DEBUGVIEW:
OnDebugView();
break;
case ID_SETREGISTRY:
OnSetRegistry();
break;
case ID_TASK_KILL:
OnKill();
break;
@ -2037,12 +2077,12 @@ void CDxwndhostView::OnRun()
PathRemoveFileSpec(path);
if(TargetMaps[i].flags2 & STARTDEBUG){
ThreadInfo.TM=&TargetMaps[i];
ThreadInfo.PM=&TitleMaps[i];
ThreadInfo.PM=&PrivateMaps[i];
CloseHandle(CreateThread( NULL, 0, StartDebug, &ThreadInfo, 0, NULL));
}
else{
CreateProcess(NULL,
(strlen(TitleMaps[i].launchpath)>0) ? TitleMaps[i].launchpath: TargetMaps[i].path,
(strlen(PrivateMaps[i].launchpath)>0) ? PrivateMaps[i].launchpath: TargetMaps[i].path,
0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, path, &sinfo, &pinfo);
CloseHandle(pinfo.hProcess); // no longer needed, avoid handle leakage
CloseHandle(pinfo.hThread); // no longer needed, avoid handle leakage

View File

@ -21,7 +21,7 @@ private:
void Resize(void);
void SaveConfigFile();
TARGETMAP TargetMaps[MAXTARGETS];
PRIVATEMAP TitleMaps[MAXTARGETS];
PRIVATEMAP PrivateMaps[MAXTARGETS];
char InitPath[MAX_PATH];
BOOL isUpdated;
DEVMODE InitDevMode;
@ -79,6 +79,7 @@ protected:
afx_msg void OnViewLog();
afx_msg void OnDeleteLog();
afx_msg void OnDebugView();
afx_msg void OnSetRegistry();
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnRun();
afx_msg void OnClearAllLogs();

Binary file not shown.