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

447 lines
13 KiB
C++
Raw Normal View History

// TargetDlg.cpp : Implementation
//
#include "stdafx.h"
#include "shlwapi.h"
#include "dxwndhost.h"
#include "TargetDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern BOOL KillProcByName(char *, BOOL, BOOL);
extern BOOL gbDebug;
/////////////////////////////////////////////////////////////////////////////
// CTargetDlg Dialog
CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTargetDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTargetDlg)
m_DXVersion = 0;
m_MonitorId = 0; // default: the first one, of course ....
m_MaxDdrawInterface = 6;
m_SlowRatio = 2;
m_Coordinates = 0;
m_InitColorDepth = 0; // default: current color depth
m_DxEmulationMode = 3; // default: emulated
m_DxFilterMode = 0; // default: ddraw filtering
m_DCEmulationMode = 0; // default: no emulation
m_MouseVisibility = 0;
m_MouseClipper = 0;
m_OffendingMessages = 0;
m_TextureHandling = 0;
m_HookDI = FALSE;
m_HookDI8 = FALSE;
m_EmulateRelMouse = FALSE; // ??
m_SkipDevTypeHID = FALSE;
m_ModifyMouse = TRUE; // default true !!
m_VirtualJoystick = FALSE;
m_Unacquire = FALSE;
//m_LogEnabled = FALSE;
m_OutDebug = FALSE;
m_RegistryOp = FALSE;
m_CursorTrace = FALSE;
m_OutWinMessages = FALSE;
m_OutDWTrace = FALSE;
m_OutOGLTrace = FALSE;
2017-03-25 10:00:24 -04:00
m_OutHexTrace = FALSE;
m_OutWGTrace = FALSE;
m_OutD3DTrace = FALSE;
m_OutDDRAWTrace = FALSE;
m_OutDebugString = FALSE;
//m_EraseLogFile = FALSE;
m_AddTimeStamp = FALSE;
m_AddRelativeTime = FALSE;
m_ImportTable = FALSE;
m_TraceHooks = FALSE;
m_HandleExceptions = FALSE;
m_VirtualHeap = FALSE;
m_SuppressIME = FALSE;
m_SuppressD3DExt = FALSE;
m_Enum16bitModes = FALSE;
m_TrimTextureFormats = FALSE;
m_D3D8Back16 = FALSE;
m_NoHALDevice = FALSE;
//m_RawFormat = FALSE;
m_TextureFileFormat = 0;
m_SetCompatibility = TRUE; // default true !!
m_AEROBoost = TRUE; // default true !!
m_DiabloTweak = FALSE;
m_HookDirectSound = FALSE;
m_HookWinG32 = FALSE;
m_HookSmackW32 = FALSE;
m_FixSmackLoop = FALSE;
m_BlockPriorityClass = FALSE;
m_EASportsHack = FALSE;
m_LegacyAlloc = FALSE;
m_DisableMaxWinMode = FALSE;
m_DisableDisableAltTab = FALSE;
m_NoImagehlp = FALSE;
m_ReplacePrivOps = FALSE;
m_ForcesHEL = FALSE;
m_MinimalCaps = FALSE;
m_SetZBufferBitDepths = FALSE;
m_ForcesSwapEffect = FALSE;
m_ColorFix = FALSE;
m_FixGlobalUnlock = FALSE;
m_FixFreeLibrary = FALSE;
m_LoadLibraryErr = FALSE;
m_FixAdjustWinRect = FALSE;
m_NoPixelFormat = FALSE;
m_NoAlphaChannel = FALSE;
m_FixRefCounter = TRUE; // default true !!
m_ReturnNullRef = FALSE;
m_NoD3DReset = FALSE;
m_HideDesktop = FALSE;
m_HideTaskbar = FALSE;
m_ActivateApp = FALSE;
m_UnlockZOrder = FALSE;
m_NoDestroyWindow = FALSE;
m_LockSysColors = FALSE;
m_LockReservedPalette = FALSE;
m_LimitScreenRes = FALSE;
m_SingleProcAffinity = FALSE;
m_UseLastCore = FALSE;
m_LimitResources = FALSE;
m_CDROMDriveType = FALSE;
m_HideCDROMEmpty = FALSE;
m_HookGOGLibs = FALSE;
m_BypassGOGLibs = FALSE;
m_FontBypass = FALSE;
m_BufferedIOFix = FALSE;
m_ZBufferClean = FALSE;
m_ZBuffer0Clean = FALSE;
m_DynamicZClean = FALSE;
m_ZBufferHardClean = FALSE;
m_ZBufferAlways = FALSE;
m_HotPatchAlways = FALSE;
m_FreezeInjectedSon = FALSE;
m_StressResources = FALSE;
m_DisableFogging = FALSE;
m_Power2Width = FALSE;
m_ClearTarget = FALSE;
m_FixPitch = FALSE,
m_NoPower2Fix = FALSE;
m_NoPerfCounter = FALSE;
m_UnNotify = FALSE;
m_Windowize = TRUE; // default true !!
m_HotPatch = FALSE;
m_HookDLLs = TRUE; // default true !!
m_AnsiWide = FALSE;
m_HookNoRun = FALSE;
m_CopyNoShims = FALSE;
m_HookNoUpdate = FALSE;
m_SequencedIAT = FALSE;
m_TerminateOnClose = FALSE;
m_ConfirmOnClose = FALSE;
m_HookEnabled = TRUE; // default true !!
m_NeedAdminCaps = FALSE;
m_EmulateRegistry = FALSE;
m_OverrideRegistry = FALSE;
m_Wow64Registry = FALSE;
m_Wow32Registry = FALSE;
m_FullScreenOnly = FALSE;
m_ShowHints = FALSE;
m_BackgroundPriority = FALSE;
m_PeekAllMessages = FALSE;
m_NoWinPosChanges = FALSE;
m_MessagePump = FALSE;
m_ClipMenu = FALSE;
m_NoBanner = FALSE;
m_FilePath = _T("");
m_Module = _T("");
m_SlowDown = FALSE;
m_BlitFromBackBuffer = FALSE;
m_NoFlipEmulation = FALSE;
m_OffscreenZBuffer = FALSE;
m_LockColorDepth = FALSE;
m_DisableGammaRamp = FALSE;
m_AutoRefresh = FALSE;
m_IndependentRefresh = FALSE;
m_TextureFormat = FALSE;
2017-03-25 09:59:46 -04:00
//m_FixWinFrame = FALSE;
m_VideoToSystemMem = FALSE;
m_FixTextOut = FALSE;
m_SharedDC = FALSE;
m_HookGlide = FALSE;
m_RemapMCI = TRUE;
m_NoMovies = FALSE;
m_FixMoviesColor = FALSE;
m_StretchMovies = FALSE;
m_BypassMCI = FALSE;
m_SuppressRelease = FALSE;
m_KeepCursorWithin = FALSE;
m_KeepCursorFixed = FALSE;
m_UseRGB565 = TRUE; // seems the default for 16bit video mode
m_SuppressDXErrors = FALSE;
m_FlipEmulation = TRUE; // better set true default, since this mode is more compatible
m_MarkBlit = FALSE;
m_MarkLock = FALSE;
m_MarkWinG32 = FALSE;
m_MarkGDI32 = FALSE;
m_DumpDIBSection = FALSE;
m_DumpDevContext = FALSE;
m_NoSysMemPrimary = FALSE;
m_NoSysMemBackBuf = FALSE;
m_NoBlt = FALSE;
m_BilinearBlt = FALSE;
m_FastBlt = FALSE;
m_GDIColorConv = FALSE;
m_PreventMaximize = FALSE;
m_ClientRemapping = TRUE; // default true !!
m_LockWinStyle = FALSE;
m_FixParentWin = FALSE;
2017-03-25 09:59:46 -04:00
//m_ModalStyle = FALSE;
m_KeepAspectRatio = FALSE;
m_ForceWinResize = FALSE;
m_HideMultiMonitor = FALSE;
m_FixD3DFrame = FALSE;
m_NoWindowMove = FALSE;
m_HookChildWin = FALSE;
m_HookDlgWin = FALSE;
m_MessageProc = FALSE;
m_FixMouseHook = FALSE;
m_FixNCHITTEST = FALSE;
m_RecoverScreenMode = FALSE;
m_RefreshOnResize = FALSE;
m_Init8BPP = FALSE;
m_Init16BPP = FALSE;
m_BackBufAttach = FALSE;
m_ClearTextureFourCC = FALSE;
m_NoDDExclusiveMode = FALSE;
m_CreateDesktop = FALSE;
m_AllowSysmemOn3DDev = FALSE;
m_VSyncMode = 0;
m_VSyncImpl = 0;
m_WaitMode = 0;
m_HandleAltF4 = FALSE;
m_LimitFPS = FALSE;
m_SkipFPS = FALSE;
m_ShowFPS = FALSE;
m_ShowFPSOverlay = FALSE;
m_ShowTimeStretch = FALSE;
m_TimeStretch = FALSE;
m_StretchTimers = FALSE;
m_NormalizePerfCount = FALSE;
m_CPUSlowDown = FALSE;
m_CPUMaxUsage = FALSE;
m_QuarterBlt = FALSE;
m_FineTiming = FALSE;
m_EnableTimeFreeze = FALSE;
m_ReleaseMouse = FALSE;
m_EnableHotKeys = TRUE; // default true !!
m_InterceptRDTSC = FALSE;
m_HookOpenGL = FALSE;
m_ForceHookOpenGL = FALSE;
m_FixPixelZoom = FALSE;
m_FixBindTexture = FALSE;
m_HookGlut32 = FALSE;
m_FakeVersion = FALSE;
m_FullRectBlt = FALSE;
m_CenterToWin = FALSE;
m_Deinterlace = FALSE;
m_LimitDdraw = FALSE;
m_SuppressOverlay = FALSE;
m_SurfaceWarn = FALSE;
m_CapMask = FALSE;
m_NoWindowHooks = FALSE;
m_NoDDRAWBlt = FALSE;
m_NoDDRAWFlip = FALSE;
m_NoGDIBlt = FALSE;
m_NoFillRect = FALSE;
m_FixClipperArea = FALSE; // ??
m_SharedDCHybrid = FALSE; // ??
m_SyncPalette = FALSE;
m_NoWinErrors = FALSE;
m_PretendVisible = FALSE;
m_WinInsulation = FALSE;
m_QualityFonts = FALSE;
m_AnalyticMode = FALSE;
m_NoPaletteUpdate = FALSE;
m_WireFrame = FALSE;
m_NoTextures = FALSE;
m_BlackWhite = FALSE;
m_AssertDialog = FALSE;
m_InitialRes = FALSE;
m_MaximumRes = FALSE;
m_ClipperMode = 0;
m_PosX = 50;
m_PosY = 50;
m_SizX = 800;
m_SizY = 600;
m_InitResW = 800;
m_InitResH = 600;
m_MaxFPS = 0;
m_InitTS = 8;
m_SwapEffect = 0;
m_InjectionMode = 0;
m_WinMovementType = 1; // "Floating" position mode, better than "Free"!
m_ScanLine = 0;
//}}AFX_DATA_INIT
}
BOOL CTargetDlg::OnInitDialog()
{
int i=0;
AfxEnableControlContainer();
CDialog::OnInitDialog();
char sCaption[48+1];
LoadString(AfxGetResourceHandle(), DXW_TAB_MAIN, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_HOOK, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_VIDEO, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_INPUT, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_DIRECTX, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_DIRECTX2, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_D3D, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_TIMING, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_LOGS, sCaption, sizeof(sCaption));
m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
LoadString(AfxGetResourceHandle(), DXW_TAB_LIBS, sCaption, sizeof(sCaption));
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));
if (gbDebug) m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));
m_tabdxTabCtrl.Init();
return TRUE;
}
void CTargetDlg::OnOK()
{
m_tabdxTabCtrl.OnOK();
CDialog::OnOK();
}
void CTargetDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTargetDlg)
DDX_Control(pDX, IDC_TABPANEL, m_tabdxTabCtrl);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTargetDlg, CDialog)
//{{AFX_MSG_MAP(CTargetDlg)
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDTRY, &CTargetDlg::OnBnClickedTry)
ON_BN_CLICKED(IDKILL, &CTargetDlg::OnBnClickedKill)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTargetDlg Message Handler
void CTargetDlg::OnBnClickedTry()
{
#if 0
NMHDR nmh;
nmh.code = ID_PRUN;
nmh.idFrom = NULL;
nmh.hwndFrom = NULL;
this->GetParent()->SendMessage(WM_NOTIFY, 0, (LPARAM)&nmh);
#else
char path[MAX_PATH+1];
char fullpath[MAX_PATH+1];
int iHookStatus;
TARGETMAP RestrictedMaps[2];
extern void SetTargetFromDlg(TARGETMAP *, CTargetDlg *);
extern BOOL CheckStatus(void);
STARTUPINFO sinfo;
PROCESS_INFORMATION pinfo;
char sMsg[81];
TARGETMAP TargetMap;
PRIVATEMAP PrivateMap;
ThreadInfo_Type ThreadInfo;
static BOOL IsLocked = FALSE;
if(IsLocked) return;
if (CheckStatus()) return; // don't try when status is active
IsLocked = TRUE;
m_tabdxTabCtrl.OnOK();
SetTargetFromDlg(&RestrictedMaps[0], this);
memset(&RestrictedMaps[1], 0, sizeof(TARGETMAP));
strcpy_s(path, sizeof(path), m_FilePath.GetBuffer());
PathRemoveFileSpec(path);
SetTarget(NULL, RestrictedMaps);
iHookStatus=GetHookStatus(NULL);
if(iHookStatus == DXW_IDLE) StartHook();
switch(m_InjectionMode){
case 1:
extern DWORD WINAPI StartDebug(void *);
strcpy(TargetMap.path, m_FilePath);
strcpy(PrivateMap.launchpath, m_LaunchPath);
ThreadInfo.TM=&TargetMap;
ThreadInfo.PM=&PrivateMap;
CloseHandle(CreateThread( NULL, 0, StartDebug, &ThreadInfo, 0, NULL));
break;
case 2:
extern void InjectSuspended(char *, char *);
strcpy(TargetMap.path, m_FilePath);
strcpy(PrivateMap.launchpath, m_LaunchPath);
ThreadInfo.TM=&TargetMap;
ThreadInfo.PM=&PrivateMap;
InjectSuspended((strlen(PrivateMap.launchpath)>0) ? PrivateMap.launchpath: TargetMap.path, path);
break;
case 0:
default:
ZeroMemory(&sinfo, sizeof(sinfo));
sinfo.cb = sizeof(sinfo);
strncpy(fullpath, m_LaunchPath.IsEmpty() ? m_FilePath.GetBuffer() : m_LaunchPath.GetBuffer(), MAX_PATH);
if(!CreateProcess(NULL, fullpath,
0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, path, &sinfo, &pinfo)){
sprintf(sMsg, "CreateProcess ERROR %d", GetLastError());
MessageBox(sMsg, "Error", MB_ICONEXCLAMATION);
}
CloseHandle(pinfo.hProcess); // no longer needed, avoid handle leakage
CloseHandle(pinfo.hThread); // no longer needed, avoid handle leakage
break;
}
// wait & recover
Sleep(5000);
//SetTarget(CDxwndhostView::TargetMaps);
if(iHookStatus == DXW_IDLE) EndHook();
IsLocked = FALSE;
#endif
}
void CTargetDlg::OnBnClickedKill()
{
char FilePath[MAX_PATH+1];
char *lpProcName, *lpNext;
HRESULT res;
strncpy(FilePath, m_FilePath.GetBuffer(), MAX_PATH);
lpProcName=FilePath;
while (lpNext=strchr(lpProcName,'\\')) lpProcName=lpNext+1;
if(!KillProcByName(lpProcName, FALSE, FALSE)){
wchar_t *wcstring = new wchar_t[48+1];
mbstowcs_s(NULL, wcstring, 48, lpProcName, _TRUNCATE);
res=MessageBoxLangArg(DXW_STRING_KILLTASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring);
if(res!=IDYES) return;
KillProcByName(lpProcName, TRUE, FALSE);
}
else{
MessageBoxLang(DXW_STRING_NOKILLTASK, DXW_STRING_INFO, MB_ICONEXCLAMATION);
}
}