mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_03_74_src
Former-commit-id: 34b12a81c38fe41efec75082ef0312828ec7c5fe
This commit is contained in:
parent
36d3bd869b
commit
f07fc28344
@ -1,34 +0,0 @@
|
|||||||
[window]
|
|
||||||
posx=50
|
|
||||||
posy=50
|
|
||||||
sizx=320
|
|
||||||
sizy=200
|
|
||||||
lang=default
|
|
||||||
;lang=automatic
|
|
||||||
;updatepaths=1
|
|
||||||
;debug=1
|
|
||||||
;multiprocesshook=0
|
|
||||||
;checkadmin=0
|
|
||||||
[texture]
|
|
||||||
MinTexX=16
|
|
||||||
MaxTexX=0
|
|
||||||
MinTexY=16
|
|
||||||
MaxTexY=0
|
|
||||||
[keymapping]
|
|
||||||
timetoggle=0x72
|
|
||||||
altf4=0x73
|
|
||||||
timeslow=0x74
|
|
||||||
timefast=0x75
|
|
||||||
cliptoggle=
|
|
||||||
refresh=
|
|
||||||
logtoggle=
|
|
||||||
plocktoggle=
|
|
||||||
fpstoggle=
|
|
||||||
printscreen=0x7B
|
|
||||||
corner=0x7A
|
|
||||||
freezetime=0x79
|
|
||||||
fullscreen=0x0D
|
|
||||||
workarea=
|
|
||||||
desktop=
|
|
||||||
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:f80de53cd4be510b1bd1357b345ca6353b3d2b8a00a459b3d736f67b62bdee85
|
oid sha256:49d7c2658bf62db9650233f60f2cf5dd82912f2a522c26d4c115891440ccabd9
|
||||||
size 660480
|
size 659968
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:17c2ae808e9f1b33fb9f412cc91d8c501cec58f395a2e9d098c008abc9285e74
|
oid sha256:c966fe71e5250ed781b9e1415ce53fec601a93c4384893a2afb78bab76d75e56
|
||||||
size 576000
|
size 640512
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
[window]
|
|
||||||
posx=50
|
|
||||||
posy=50
|
|
||||||
sizx=320
|
|
||||||
sizy=200
|
|
@ -5,10 +5,10 @@ module0=p3shared
|
|||||||
opengllib0=
|
opengllib0=
|
||||||
ver0=8
|
ver0=8
|
||||||
coord0=0
|
coord0=0
|
||||||
flag0=134217762
|
flag0=134217770
|
||||||
flagg0=1207959552
|
flagg0=1207959552
|
||||||
flagh0=20
|
flagh0=20
|
||||||
flagi0=4
|
flagi0=4194308
|
||||||
tflag0=0
|
tflag0=0
|
||||||
initx0=0
|
initx0=0
|
||||||
inity0=0
|
inity0=0
|
||||||
@ -24,3 +24,14 @@ maxfps0=0
|
|||||||
initts0=0
|
initts0=0
|
||||||
winver0=0
|
winver0=0
|
||||||
maxres0=-1
|
maxres0=-1
|
||||||
|
launchpath0=
|
||||||
|
notes0=
|
||||||
|
registry0=
|
||||||
|
flagj0=0
|
||||||
|
flagk0=0
|
||||||
|
flagl0=0
|
||||||
|
flagm0=0
|
||||||
|
dflag0=0
|
||||||
|
swapeffect0=0
|
||||||
|
maxddinterface0=7
|
||||||
|
slowratio0=1
|
||||||
|
31
build/exports/Midnight GT Primary Racer.dxw
Normal file
31
build/exports/Midnight GT Primary Racer.dxw
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
[target]
|
||||||
|
title0=Midnight GT Primary Racer
|
||||||
|
path0=D:\Games\Midnight GT Primary Racer\game.exe
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
registry0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=136314914
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=4226
|
||||||
|
flagk0=65552
|
||||||
|
flagl0=0
|
||||||
|
flagm0=0
|
||||||
|
tflag0=0
|
||||||
|
dflag0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
||||||
|
swapeffect0=0
|
||||||
|
maxddinterface0=7
|
||||||
|
slowratio0=2
|
31
build/exports/Total Annihilation.dxw
Normal file
31
build/exports/Total Annihilation.dxw
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
[target]
|
||||||
|
title0=Total Annihilation
|
||||||
|
path0=D:\Games\TOTA\totala.exe
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
registry0=
|
||||||
|
ver0=1
|
||||||
|
coord0=0
|
||||||
|
flag0=136314914
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=4224
|
||||||
|
flagk0=0
|
||||||
|
flagl0=0
|
||||||
|
flagm0=0
|
||||||
|
tflag0=0
|
||||||
|
dflag0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
||||||
|
swapeffect0=0
|
||||||
|
maxddinterface0=7
|
||||||
|
slowratio0=2
|
@ -1142,3 +1142,8 @@ fix: logic for restering last window position on multimonitor configurations
|
|||||||
add: "Help -> View Help" to show help page
|
add: "Help -> View Help" to show help page
|
||||||
add: "Fix GlobalUnlock" flag to fix GlobalUnlock bad errorcodes in "Grand Prix World" and possibly other games.
|
add: "Fix GlobalUnlock" flag to fix GlobalUnlock bad errorcodes in "Grand Prix World" and possibly other games.
|
||||||
add: revised log configuration, added "Separate" mode to make each process to write on a dedicated file.
|
add: revised log configuration, added "Separate" mode to make each process to write on a dedicated file.
|
||||||
|
|
||||||
|
v2.03.74
|
||||||
|
fix: logging of dwFOURCC field text value
|
||||||
|
fix: Injection routine: avoid closing a few handles that should not be closed, simplified logic.
|
||||||
|
add: GUI global configuration panel
|
@ -59,7 +59,7 @@ BOOL Inject(DWORD pID, const char * DLL_NAME)
|
|||||||
}
|
}
|
||||||
CloseHandle(hThread);
|
CloseHandle(hThread);
|
||||||
CloseHandle(hProc);
|
CloseHandle(hProc);
|
||||||
CloseHandle(hLib);
|
//CloseHandle(hLib);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1834,8 +1834,8 @@ static char *sFourCC(DWORD fcc)
|
|||||||
char *t=&sRet[0];
|
char *t=&sRet[0];
|
||||||
for(i=0; i<4; i++){
|
for(i=0; i<4; i++){
|
||||||
c = fcc & (0xFF);
|
c = fcc & (0xFF);
|
||||||
*t++ = isprint(c) ? c : '.';
|
*(t++) = isprint(c) ? c : '.';
|
||||||
c = c >> 8;
|
fcc = fcc >> 8;
|
||||||
}
|
}
|
||||||
*t = 0;
|
*t = 0;
|
||||||
return sRet;
|
return sRet;
|
||||||
|
@ -1530,7 +1530,6 @@ void HookInit(TARGETMAP *target, HWND hwnd)
|
|||||||
else
|
else
|
||||||
if(dxw.dwFlags7 & CPUMAXUSAGE)
|
if(dxw.dwFlags7 & CPUMAXUSAGE)
|
||||||
CreateThread(NULL, 0, CpuLimit, NULL, 0, NULL);
|
CreateThread(NULL, 0, CpuLimit, NULL, 0, NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LPCSTR ProcToString(LPCSTR proc)
|
LPCSTR ProcToString(LPCSTR proc)
|
||||||
|
BIN
dll/dxwnd.aps
BIN
dll/dxwnd.aps
Binary file not shown.
@ -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.73"
|
#define VERSION "2.03.74"
|
||||||
|
|
||||||
#define DDTHREADLOCK 1
|
#define DDTHREADLOCK 1
|
||||||
//#define LOCKTHREADS
|
//#define LOCKTHREADS
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
|
||||||
# Visual Studio 2008
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dxwnd", "dxwnd.vs2008.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDE}"
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
Binary file not shown.
169
dll/kernel32.cpp
169
dll/kernel32.cpp
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
//#undef IsTraceDW
|
//#undef IsTraceDW
|
||||||
//#define IsTraceDW TRUE
|
//#define IsTraceDW TRUE
|
||||||
#define LOCKINJECTIONTHREADS
|
//#define LOCKINJECTIONTHREADS
|
||||||
#define TRYFATNAMES TRUE
|
#define TRYFATNAMES TRUE
|
||||||
|
|
||||||
extern HRESULT WINAPI extDirectDrawEnumerateA(LPDDENUMCALLBACK, LPVOID);
|
extern HRESULT WINAPI extDirectDrawEnumerateA(LPDDENUMCALLBACK, LPVOID);
|
||||||
@ -920,8 +920,7 @@ BOOL WINAPI extCreateProcessA(
|
|||||||
extern BOOL Inject(DWORD, const char *);
|
extern BOOL Inject(DWORD, const char *);
|
||||||
LPVOID LastExceptionPtr = 0;
|
LPVOID LastExceptionPtr = 0;
|
||||||
|
|
||||||
//dwCreationFlags |= DEBUG_ONLY_THIS_PROCESS;
|
dwCreationFlags |= DEBUG_ONLY_THIS_PROCESS;
|
||||||
dwCreationFlags |= (DEBUG_ONLY_THIS_PROCESS|DEBUG_PROCESS);
|
|
||||||
|
|
||||||
res=(*pCreateProcessA)(
|
res=(*pCreateProcessA)(
|
||||||
lpApplicationName, lpCommandLine,
|
lpApplicationName, lpCommandLine,
|
||||||
@ -934,92 +933,89 @@ BOOL WINAPI extCreateProcessA(
|
|||||||
while(bContinueDebugging)
|
while(bContinueDebugging)
|
||||||
{
|
{
|
||||||
if (!WaitForDebugEvent(&debug_event, INFINITE)) break;
|
if (!WaitForDebugEvent(&debug_event, INFINITE)) break;
|
||||||
OutTrace("CreateProcess: event=%x(%s)\n", debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode));
|
OutTraceB("CreateProcess: WaitForDebugEvent pid=%x tid=%x event=%x(%s)\n",
|
||||||
|
debug_event.dwProcessId, debug_event.dwThreadId, debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode));
|
||||||
switch(debug_event.dwDebugEventCode){
|
switch(debug_event.dwDebugEventCode){
|
||||||
case EXIT_PROCESS_DEBUG_EVENT:
|
case EXIT_PROCESS_DEBUG_EVENT:
|
||||||
//OutTrace("CreateProcess: event=%x(%s) process terminated\n", debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode));
|
bContinueDebugging=false;
|
||||||
bContinueDebugging=false;
|
break;
|
||||||
break;
|
case CREATE_PROCESS_DEBUG_EVENT:
|
||||||
case CREATE_PROCESS_DEBUG_EVENT:
|
GetModuleFileName(GetModuleHandle("dxwnd"), path, MAX_PATH);
|
||||||
//OutTrace("CreateProcess: event=%x(%s) process started\n", debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode));
|
OutTrace("CreateProcess: injecting path=%s\n", path);
|
||||||
GetModuleFileName(GetModuleHandle("dxwnd"), path, MAX_PATH);
|
if(!Inject(lpProcessInformation->dwProcessId, path)){
|
||||||
OutTrace("CreateProcess: injecting path=%s\n", path);
|
OutTrace("CreateProcess: Injection ERROR pid=%x dll=%s\n", lpProcessInformation->dwProcessId, path);
|
||||||
if(!Inject(lpProcessInformation->dwProcessId, path)){
|
}
|
||||||
OutTrace("CreateProcess: Injection ERROR pid=%x dll=%s\n", lpProcessInformation->dwProcessId, path);
|
|
||||||
}
|
|
||||||
#ifdef LOCKINJECTIONTHREADS
|
#ifdef LOCKINJECTIONTHREADS
|
||||||
extern LPVOID GetThreadStartAddress(HANDLE);
|
HANDLE TargetHandle;
|
||||||
DWORD TargetHandle;
|
extern LPVOID GetThreadStartAddress(HANDLE);
|
||||||
DWORD EndlessLoop;
|
DWORD EndlessLoop;
|
||||||
EndlessLoop=0x9090FEEB; // assembly for JMP to here, NOP, NOP
|
EndlessLoop=0x9090FEEB; // assembly for JMP to here, NOP, NOP
|
||||||
SIZE_T BytesCount;
|
SIZE_T BytesCount;
|
||||||
TargetHandle = (DWORD)OpenProcess(
|
TargetHandle = (DWORD)OpenProcess(
|
||||||
PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE,
|
PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE,
|
||||||
FALSE,
|
FALSE,
|
||||||
lpProcessInformation->dwProcessId);
|
lpProcessInformation->dwProcessId);
|
||||||
if(TargetHandle){
|
if(TargetHandle){
|
||||||
StartAddress = GetThreadStartAddress(lpProcessInformation->hThread);
|
StartAddress = GetThreadStartAddress(lpProcessInformation->hThread);
|
||||||
OutTrace("CreateProcess: StartAddress=%x\n", StartAddress);
|
OutTrace("CreateProcess: StartAddress=%x\n", StartAddress);
|
||||||
if(StartAddress){
|
if(StartAddress){
|
||||||
if(!ReadProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){
|
if(!ReadProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){
|
||||||
OutTrace("CreateProcess: ReadProcessMemory error=%d\n", GetLastError());
|
OutTrace("CreateProcess: ReadProcessMemory error=%d\n", GetLastError());
|
||||||
}
|
}
|
||||||
OutTrace("CreateProcess: StartCode=%x\n", StartingCode);
|
OutTrace("CreateProcess: StartCode=%x\n", StartingCode);
|
||||||
if(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &EndlessLoop, 4, &BytesCount)){
|
if(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &EndlessLoop, 4, &BytesCount)){
|
||||||
OutTrace("CreateProcess: WriteProcessMemory error=%d\n", GetLastError());
|
OutTrace("CreateProcess: WriteProcessMemory error=%d\n", GetLastError());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
OutTrace("CreateProcess: injection started\n", res);
|
OutTrace("CreateProcess: injection started\n", res);
|
||||||
CloseHandle(((CREATE_PROCESS_DEBUG_INFO *)&debug_event.u)->hProcess);
|
CloseHandle(debug_event.u.CreateProcessInfo.hFile);
|
||||||
CloseHandle(((CREATE_PROCESS_DEBUG_INFO *)&debug_event.u)->hThread);
|
break;
|
||||||
CloseHandle(((CREATE_PROCESS_DEBUG_INFO *)&debug_event.u)->hFile);
|
case EXCEPTION_DEBUG_EVENT:
|
||||||
break;
|
{
|
||||||
case EXIT_THREAD_DEBUG_EVENT:
|
LPEXCEPTION_DEBUG_INFO ei;
|
||||||
//OutTrace("CreateProcess: event=%x(%s) injection terminated\n", debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode));
|
ei=(LPEXCEPTION_DEBUG_INFO)&debug_event.u;
|
||||||
|
OutTraceE("CreateProcess: EXCEPTION code=%x flags=%x addr=%x firstchance=%x\n",
|
||||||
|
ei->ExceptionRecord.ExceptionCode,
|
||||||
|
ei->ExceptionRecord.ExceptionFlags,
|
||||||
|
ei->ExceptionRecord.ExceptionAddress,
|
||||||
|
debug_event.u.Exception.dwFirstChance);
|
||||||
|
// exception twice in same address, then do not continue.
|
||||||
|
if(LastExceptionPtr == ei->ExceptionRecord.ExceptionAddress) bContinueDebugging = FALSE;
|
||||||
|
//if(ei->dwFirstChance == 0) bContinueDebugging = FALSE;
|
||||||
|
LastExceptionPtr = ei->ExceptionRecord.ExceptionAddress;
|
||||||
|
}
|
||||||
|
bContinueDebugging=false;
|
||||||
|
break;
|
||||||
|
case LOAD_DLL_DEBUG_EVENT:
|
||||||
|
//OutTrace("CreateProcess: event=%x(%s) dll=%s address=%x\n",
|
||||||
|
// debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode),
|
||||||
|
// ((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpImageName, ((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpBaseOfDll);
|
||||||
|
CloseHandle(debug_event.u.LoadDll.hFile);
|
||||||
|
break;
|
||||||
|
case CREATE_THREAD_DEBUG_EVENT:
|
||||||
|
OutTraceB("CreateProcess: THREAD %x\n", debug_event.u.CreateThread.hThread);
|
||||||
|
break;
|
||||||
|
case EXIT_THREAD_DEBUG_EVENT:
|
||||||
#ifdef LOCKINJECTIONTHREADS
|
#ifdef LOCKINJECTIONTHREADS
|
||||||
if(TargetHandle && StartAddress){
|
if(TargetHandle && StartAddress){
|
||||||
if(dxw.dwFlags5 & FREEZEINJECTEDSON){
|
if(dxw.dwFlags5 & FREEZEINJECTEDSON){
|
||||||
OutTrace("CreateProcess: FREEZEINJECTEDSON leaving son process in endless loop\n", GetLastError());
|
OutTrace("CreateProcess: FREEZEINJECTEDSON leaving son process in endless loop\n", GetLastError());
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){
|
||||||
|
OutTrace("CreateProcess: WriteProcessMemory error=%d\n", GetLastError());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CloseHandle((HANDLE)TargetHandle);
|
||||||
|
OutTrace("CreateProcess: injection terminated\n", res);
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
if(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){
|
|
||||||
OutTrace("CreateProcess: WriteProcessMemory error=%d\n", GetLastError());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CloseHandle((HANDLE)TargetHandle);
|
|
||||||
OutTrace("CreateProcess: injection terminated\n", res);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
bContinueDebugging=false;
|
OutTraceB("CreateProcess: thread exit code=%x\n", debug_event.u.ExitThread.dwExitCode);
|
||||||
case EXCEPTION_DEBUG_EVENT:
|
bContinueDebugging=false;
|
||||||
//OutTrace("CreateProcess: event=%x(%s)\n", debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode));
|
default:
|
||||||
{
|
break;
|
||||||
LPEXCEPTION_DEBUG_INFO ei;
|
|
||||||
ei=(LPEXCEPTION_DEBUG_INFO)&debug_event.u;
|
|
||||||
OutTraceE("CreateProcess: EXCEPTION code=%x flags=%x addr=%x firstchance=%x\n",
|
|
||||||
ei->ExceptionRecord.ExceptionCode,
|
|
||||||
ei->ExceptionRecord.ExceptionFlags,
|
|
||||||
ei->ExceptionRecord.ExceptionAddress,
|
|
||||||
debug_event.u.Exception.dwFirstChance);
|
|
||||||
// exception twice in same address, then do not continue.
|
|
||||||
if(LastExceptionPtr == ei->ExceptionRecord.ExceptionAddress) bContinueDebugging = FALSE;
|
|
||||||
//if(ei->dwFirstChance == 0) bContinueDebugging = FALSE;
|
|
||||||
LastExceptionPtr = ei->ExceptionRecord.ExceptionAddress;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case LOAD_DLL_DEBUG_EVENT:
|
|
||||||
//OutTrace("CreateProcess: event=%x(%s) dll=%s address=%x\n",
|
|
||||||
// debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode),
|
|
||||||
// ((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpImageName, ((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpBaseOfDll);
|
|
||||||
CloseHandle(((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->hFile);
|
|
||||||
break;
|
|
||||||
case CREATE_THREAD_DEBUG_EVENT:
|
|
||||||
CloseHandle(((CREATE_THREAD_DEBUG_INFO *)&debug_event.u)->hThread);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if(bContinueDebugging){
|
if(bContinueDebugging){
|
||||||
ContinueDebugEvent(debug_event.dwProcessId,
|
ContinueDebugEvent(debug_event.dwProcessId,
|
||||||
@ -1027,12 +1023,17 @@ BOOL WINAPI extCreateProcessA(
|
|||||||
dwContinueStatus);
|
dwContinueStatus);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
DebugSetProcessKillOnExit(FALSE);
|
|
||||||
ContinueDebugEvent(debug_event.dwProcessId, debug_event.dwThreadId, DBG_CONTINUE);
|
ContinueDebugEvent(debug_event.dwProcessId, debug_event.dwThreadId, DBG_CONTINUE);
|
||||||
DebugActiveProcessStop(debug_event.dwProcessId);
|
if(!DebugSetProcessKillOnExit(FALSE)){
|
||||||
|
OutTraceE("CreateProcess: DebugSetProcessKillOnExit ERROR err=%d\n", GetLastError());
|
||||||
|
}
|
||||||
|
if(!DebugActiveProcessStop(debug_event.dwProcessId)){
|
||||||
|
OutTraceE("CreateProcess: DebugActiveProcessStop ERROR err=%d\n", GetLastError());
|
||||||
|
MessageBox(NULL, "Error in DebugActiveProcessStop", "dxwnd", MB_OK);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OutTrace("CreateProcess: detached\n", res);
|
OutTrace("CreateProcess: detached\n");
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
res=(*pCreateProcessA)(
|
res=(*pCreateProcessA)(
|
||||||
|
BIN
host/-dxwndhost.vs2008.suo
Normal file
BIN
host/-dxwndhost.vs2008.suo
Normal file
Binary file not shown.
218
host/CGlobalSettings.cpp
Normal file
218
host/CGlobalSettings.cpp
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
// CGlobalSettings.cpp : implementation file
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "dxwndhost.h"
|
||||||
|
//#include "dxwndhostView.h"
|
||||||
|
#include "CGlobalSettings.h"
|
||||||
|
|
||||||
|
extern char gInitPath[];
|
||||||
|
|
||||||
|
Key_Type FKeys[] = {
|
||||||
|
{IDC_KEY_LABEL1, "Time toggle", IDC_KEY_COMBO1, "timetoggle", 0},
|
||||||
|
{IDC_KEY_LABEL2, "Time fast", IDC_KEY_COMBO2, "timefast", 0},
|
||||||
|
{IDC_KEY_LABEL3, "Time slow", IDC_KEY_COMBO3, "timeslow", 0},
|
||||||
|
{IDC_KEY_LABEL4, "Alt-F4", IDC_KEY_COMBO4, "altf4", 0},
|
||||||
|
{IDC_KEY_LABEL5, "Clip toggle", IDC_KEY_COMBO5, "cliptoggle", 0},
|
||||||
|
{IDC_KEY_LABEL6, "Refresh", IDC_KEY_COMBO6, "refresh", 0},
|
||||||
|
{IDC_KEY_LABEL7, "Log toggle", IDC_KEY_COMBO7, "logtoggle", 0},
|
||||||
|
{IDC_KEY_LABEL8, "label4", IDC_KEY_COMBO8, "plogtoggle", 0},
|
||||||
|
{IDC_KEY_LABEL9, "FPS toggle", IDC_KEY_COMBO9, "fpstoggle", 0},
|
||||||
|
{IDC_KEY_LABEL10, "Print screen", IDC_KEY_COMBO10, "printscreen", 0},
|
||||||
|
{IDC_KEY_LABEL11, "Corner tog.", IDC_KEY_COMBO11, "corner", 0},
|
||||||
|
{IDC_KEY_LABEL12, "Time freeze", IDC_KEY_COMBO12, "freezetime", 0},
|
||||||
|
{IDC_KEY_LABEL13, "Fullscr. t.", IDC_KEY_COMBO13, "fullscreen", 0},
|
||||||
|
{IDC_KEY_LABEL14, "Work area t.", IDC_KEY_COMBO14, "workarea", 0},
|
||||||
|
{IDC_KEY_LABEL15, "Desktop t.", IDC_KEY_COMBO15, "desktop", 0},
|
||||||
|
{0, "", 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
Key_Type HKeys[] = {
|
||||||
|
{IDC_HKEY_LABEL1, "Minimize", IDC_HKEY_COMBO1, "minimize", 0},
|
||||||
|
{IDC_HKEY_LABEL2, "Restore", IDC_HKEY_COMBO2, "restore", 0},
|
||||||
|
{IDC_HKEY_LABEL3, "Kill proc.", IDC_HKEY_COMBO3, "kill", 0},
|
||||||
|
{0, "", 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
KeyCombo_Type FKeyCombo[] = {
|
||||||
|
{-1, "--"},
|
||||||
|
{VK_F1, "F1"},
|
||||||
|
{VK_F2, "F2"},
|
||||||
|
{VK_F3, "F3"},
|
||||||
|
{VK_F5, "F5"},
|
||||||
|
{VK_F6, "F6"},
|
||||||
|
{VK_F7, "F7"},
|
||||||
|
{VK_F8, "F8"},
|
||||||
|
{VK_F9, "F9"},
|
||||||
|
{VK_F10, "F10"},
|
||||||
|
{VK_F11, "F11"},
|
||||||
|
{VK_F12, "F12"},
|
||||||
|
{0, ""}
|
||||||
|
};
|
||||||
|
|
||||||
|
KeyCombo_Type HKeyCombo[] = {
|
||||||
|
{-1, "--"},
|
||||||
|
{VK_END, "END"},
|
||||||
|
{VK_HOME, "HOME"},
|
||||||
|
{VK_DELETE, "DEL"},
|
||||||
|
{VK_ESCAPE, "ESC"},
|
||||||
|
{VK_F1, "F1"},
|
||||||
|
{VK_F2, "F2"},
|
||||||
|
{VK_F3, "F3"},
|
||||||
|
{VK_F5, "F5"},
|
||||||
|
{VK_F6, "F6"},
|
||||||
|
{VK_F7, "F7"},
|
||||||
|
{VK_F8, "F8"},
|
||||||
|
{VK_F9, "F9"},
|
||||||
|
{VK_F10, "F10"},
|
||||||
|
{VK_F11, "F11"},
|
||||||
|
{VK_F12, "F12"},
|
||||||
|
{0, ""}
|
||||||
|
};
|
||||||
|
|
||||||
|
// CGlobalSettings dialog
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC(CGlobalSettings, CDialog)
|
||||||
|
|
||||||
|
CGlobalSettings::CGlobalSettings(CWnd* pParent /*=NULL*/)
|
||||||
|
: CDialog(CGlobalSettings::IDD, pParent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CGlobalSettings::~CGlobalSettings()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CGlobalSettings::DoDataExchange(CDataExchange* pDX)
|
||||||
|
{
|
||||||
|
CDialog::DoDataExchange(pDX);
|
||||||
|
DDX_Check(pDX, IDC_CONFIG_DEBUGMODE, m_DebugMode);
|
||||||
|
DDX_Check(pDX, IDC_CONFIG_AUTOHIDE, m_AutoHideMode);
|
||||||
|
DDX_Check(pDX, IDC_CONFIG_CHECKADMIN, m_CheckAdminRights);
|
||||||
|
DDX_Check(pDX, IDC_CONFIG_SAVEPATHS, m_UpdatePaths);
|
||||||
|
DDX_Text (pDX, IDC_TEX_MINX, m_TexMinX);
|
||||||
|
DDX_Text (pDX, IDC_TEX_MINY, m_TexMinY);
|
||||||
|
DDX_Text (pDX, IDC_TEX_MAXX, m_TexMaxX);
|
||||||
|
DDX_Text (pDX, IDC_TEX_MAXY, m_TexMaxY);
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CGlobalSettings, CDialog)
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
#define IDPaletteTIMER 2
|
||||||
|
|
||||||
|
// CPaletteDialog message handlers
|
||||||
|
|
||||||
|
//static void SetKeys(HWND hDlg, Key_Type *FKeys, KeyCombo_Type *FKeyCombo)
|
||||||
|
//{
|
||||||
|
// for(int i=0; FKeys[i].iLabelResourceId; i++){
|
||||||
|
// int iCursor = 0;
|
||||||
|
// DWORD dwKey;
|
||||||
|
// dwKey = GetPrivateProfileInt("keymapping", FKeys[i].sIniLabel, -1, gInitPath);
|
||||||
|
// SetDlgItemText(hDlg,FKeys[i].iLabelResourceId,FKeys[i].sLabel);
|
||||||
|
// CComboBox *pCombo=(CComboBox *)GetDlgItem(FKeys[i].iComboResourceId);
|
||||||
|
// pCombo->Clear();
|
||||||
|
// for(int j=0; FKeyCombo[j].dwVKeyCode; j++) {
|
||||||
|
// pCombo->AddString(FKeyCombo[j].sVKeyLabel);
|
||||||
|
// if(dwKey == FKeyCombo[j].dwVKeyCode) iCursor=j;
|
||||||
|
// }
|
||||||
|
// pCombo->SetCurSel(iCursor);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
BOOL CGlobalSettings::OnInitDialog()
|
||||||
|
{
|
||||||
|
for(int i=0; FKeys[i].iLabelResourceId; i++){
|
||||||
|
int iCursor = 0;
|
||||||
|
DWORD dwKey;
|
||||||
|
dwKey = GetPrivateProfileInt("keymapping", FKeys[i].sIniLabel, -1, gInitPath);
|
||||||
|
SetDlgItemText(FKeys[i].iLabelResourceId,FKeys[i].sLabel);
|
||||||
|
CComboBox *pCombo=(CComboBox *)GetDlgItem(FKeys[i].iComboResourceId);
|
||||||
|
pCombo->Clear();
|
||||||
|
for(int j=0; FKeyCombo[j].dwVKeyCode; j++) {
|
||||||
|
pCombo->AddString(FKeyCombo[j].sVKeyLabel);
|
||||||
|
if(dwKey == FKeyCombo[j].dwVKeyCode) iCursor=j;
|
||||||
|
}
|
||||||
|
pCombo->SetCurSel(iCursor);
|
||||||
|
}
|
||||||
|
for(int i=0; HKeys[i].iLabelResourceId; i++){
|
||||||
|
int iCursor = 0;
|
||||||
|
DWORD dwKey;
|
||||||
|
dwKey = GetPrivateProfileInt("keymapping", HKeys[i].sIniLabel, -1, gInitPath);
|
||||||
|
SetDlgItemText(HKeys[i].iLabelResourceId,HKeys[i].sLabel);
|
||||||
|
CComboBox *pCombo=(CComboBox *)GetDlgItem(HKeys[i].iComboResourceId);
|
||||||
|
pCombo->Clear();
|
||||||
|
for(int j=0; HKeyCombo[j].dwVKeyCode; j++) {
|
||||||
|
pCombo->AddString(HKeyCombo[j].sVKeyLabel);
|
||||||
|
if(dwKey == HKeyCombo[j].dwVKeyCode) iCursor=j;
|
||||||
|
}
|
||||||
|
pCombo->SetCurSel(iCursor);
|
||||||
|
}
|
||||||
|
//SetKeys(this, FKeys, FKeyCombo);
|
||||||
|
//SetKeys(this, HKeys, HKeyCombo);
|
||||||
|
|
||||||
|
m_DebugMode = GetPrivateProfileInt("window", "debug", 0, gInitPath);
|
||||||
|
m_AutoHideMode = GetPrivateProfileInt("window", "autohide", 0, gInitPath);
|
||||||
|
m_CheckAdminRights = GetPrivateProfileInt("window", "checkadmin", 0, gInitPath);
|
||||||
|
m_UpdatePaths = GetPrivateProfileInt("window", "updatepaths", 1, gInitPath);
|
||||||
|
m_TexMinX = GetPrivateProfileInt("texture", "MinTexX", 0, gInitPath);
|
||||||
|
m_TexMinY = GetPrivateProfileInt("texture", "MinTexY", 0, gInitPath);
|
||||||
|
m_TexMaxX = GetPrivateProfileInt("texture", "MaxTexX", 0, gInitPath);
|
||||||
|
m_TexMaxY = GetPrivateProfileInt("texture", "MaxTexY", 0, gInitPath);
|
||||||
|
CDialog::OnInitDialog();
|
||||||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||||||
|
}
|
||||||
|
|
||||||
|
void CGlobalSettings::OnOK()
|
||||||
|
{
|
||||||
|
char val[32];
|
||||||
|
CDialog::OnOK();
|
||||||
|
// boolean flags
|
||||||
|
sprintf_s(val, sizeof(val), "%i", m_DebugMode);
|
||||||
|
WritePrivateProfileString("window", "debug", val, gInitPath);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", m_AutoHideMode);
|
||||||
|
WritePrivateProfileString("window", "autohide", val, gInitPath);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", m_CheckAdminRights);
|
||||||
|
WritePrivateProfileString("window", "checkadmin", val, gInitPath);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", m_UpdatePaths);
|
||||||
|
WritePrivateProfileString("window", "updatepaths", val, gInitPath);
|
||||||
|
// texture limits
|
||||||
|
sprintf_s(val, sizeof(val), "%i", m_TexMinX);
|
||||||
|
WritePrivateProfileString("texture", "MinTexX", val, gInitPath);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", m_TexMinY);
|
||||||
|
WritePrivateProfileString("texture", "MinTexY", val, gInitPath);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", m_TexMaxX);
|
||||||
|
WritePrivateProfileString("texture", "MaxTexX", val, gInitPath);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", m_TexMaxY);
|
||||||
|
WritePrivateProfileString("texture", "MaxTexY", val, gInitPath);
|
||||||
|
// fkeys
|
||||||
|
for(int i=0; FKeys[i].iLabelResourceId; i++){
|
||||||
|
int iCursor = 0;
|
||||||
|
DWORD dwKey;
|
||||||
|
CComboBox *pCombo=(CComboBox *)GetDlgItem(FKeys[i].iComboResourceId);
|
||||||
|
dwKey = FKeyCombo[pCombo->GetCurSel()].dwVKeyCode;
|
||||||
|
if(dwKey != -1) {
|
||||||
|
char sKNum[20];
|
||||||
|
sprintf_s(sKNum, sizeof(sKNum), "%i", dwKey);
|
||||||
|
WritePrivateProfileString("keymapping", FKeys[i].sIniLabel, sKNum, gInitPath);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
WritePrivateProfileString("keymapping", FKeys[i].sIniLabel, "", gInitPath);
|
||||||
|
}
|
||||||
|
// hot keys
|
||||||
|
for(int i=0; HKeys[i].iLabelResourceId; i++){
|
||||||
|
int iCursor = 0;
|
||||||
|
DWORD dwKey;
|
||||||
|
CComboBox *pCombo=(CComboBox *)GetDlgItem(HKeys[i].iComboResourceId);
|
||||||
|
dwKey = HKeyCombo[pCombo->GetCurSel()].dwVKeyCode;
|
||||||
|
if(dwKey != -1) {
|
||||||
|
char sKNum[20];
|
||||||
|
sprintf_s(sKNum, sizeof(sKNum), "%i", dwKey);
|
||||||
|
WritePrivateProfileString("keymapping", HKeys[i].sIniLabel, sKNum, gInitPath);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
WritePrivateProfileString("keymapping", HKeys[i].sIniLabel, "", gInitPath);
|
||||||
|
}
|
||||||
|
//(CDxwndhostView *)(this->GetParent())->UpdateHotKeys();
|
||||||
|
}
|
47
host/CGlobalSettings.h
Normal file
47
host/CGlobalSettings.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int iLabelResourceId;
|
||||||
|
char *sLabel;
|
||||||
|
int iComboResourceId;
|
||||||
|
char *sIniLabel;
|
||||||
|
int iComboSelection;
|
||||||
|
} Key_Type;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
DWORD dwVKeyCode;
|
||||||
|
char *sVKeyLabel;
|
||||||
|
} KeyCombo_Type;
|
||||||
|
|
||||||
|
// CGlobalSettings dialog
|
||||||
|
|
||||||
|
class CGlobalSettings : public CDialog
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC(CGlobalSettings)
|
||||||
|
|
||||||
|
public:
|
||||||
|
CGlobalSettings(CWnd* pParent = NULL); // standard constructor
|
||||||
|
virtual ~CGlobalSettings();
|
||||||
|
|
||||||
|
// Dialog Data
|
||||||
|
enum { IDD = IDD_GLOBAL_CONFIG };
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||||
|
|
||||||
|
BOOL m_DebugMode;
|
||||||
|
BOOL m_UpdatePaths;
|
||||||
|
BOOL m_AutoHideMode;
|
||||||
|
BOOL m_CheckAdminRights;
|
||||||
|
int m_TexMinX;
|
||||||
|
int m_TexMinY;
|
||||||
|
int m_TexMaxX;
|
||||||
|
int m_TexMaxY;
|
||||||
|
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
public:
|
||||||
|
public:
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
|
protected:
|
||||||
|
virtual void OnOK();
|
||||||
|
};
|
BIN
host/alt-ctrl-shift.png
Normal file
BIN
host/alt-ctrl-shift.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
BIN
host/alt.png
Normal file
BIN
host/alt.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.8 KiB |
Binary file not shown.
Binary file not shown.
@ -1,20 +0,0 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
|
||||||
# Visual Studio 2008
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dxwndhost", "dxwndhost.vs2008.vcproj", "{FD0B0234-8EC5-43C0-A384-1B881DD3D925}"
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
Binary file not shown.
@ -221,6 +221,10 @@
|
|||||||
Name="Source Files"
|
Name="Source Files"
|
||||||
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\CGlobalSettings.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\CoolUtils.cpp"
|
RelativePath=".\CoolUtils.cpp"
|
||||||
>
|
>
|
||||||
@ -504,6 +508,10 @@
|
|||||||
RelativePath=".\cdib.h"
|
RelativePath=".\cdib.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\CGlobalSettings.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\CoolUtils.h"
|
RelativePath=".\CoolUtils.h"
|
||||||
>
|
>
|
||||||
@ -617,6 +625,14 @@
|
|||||||
Name="Resource Files"
|
Name="Resource Files"
|
||||||
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\res\alt-ctrl-shift.bmp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\res\alt.bmp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\res\bigicons.bmp"
|
RelativePath=".\res\bigicons.bmp"
|
||||||
>
|
>
|
||||||
@ -698,6 +714,22 @@
|
|||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<File
|
||||||
|
RelativePath=".\alt-ctrl-shift.png"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\res\alt-ctrl-shift.png"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\res\alt.png"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\alt.png"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\resource"
|
RelativePath=".\resource"
|
||||||
>
|
>
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "PaletteDialog.h"
|
#include "PaletteDialog.h"
|
||||||
#include "TimeSliderDialog.h"
|
#include "TimeSliderDialog.h"
|
||||||
#include "ShimsDialog.h"
|
#include "ShimsDialog.h"
|
||||||
|
#include "CGlobalSettings.h"
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
#define new DEBUG_NEW
|
#define new DEBUG_NEW
|
||||||
@ -126,13 +127,13 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
|
|||||||
ON_COMMAND(ID_FILE_IMPORT, OnImport)
|
ON_COMMAND(ID_FILE_IMPORT, OnImport)
|
||||||
ON_COMMAND(ID_DELETE, OnDelete)
|
ON_COMMAND(ID_DELETE, OnDelete)
|
||||||
ON_COMMAND(ID_FILE_SORTPROGRAMSLIST, OnSort)
|
ON_COMMAND(ID_FILE_SORTPROGRAMSLIST, OnSort)
|
||||||
|
ON_COMMAND(ID_EDIT_GLOBALSETTINGS, OnGlobalSettings)
|
||||||
ON_COMMAND(ID_FILE_CLEARALLLOGS, OnClearAllLogs)
|
ON_COMMAND(ID_FILE_CLEARALLLOGS, OnClearAllLogs)
|
||||||
ON_COMMAND(ID_FILE_GOTOTRAYICON, OnGoToTrayIcon)
|
ON_COMMAND(ID_FILE_GOTOTRAYICON, OnGoToTrayIcon)
|
||||||
ON_COMMAND(ID_FILE_SAVE, OnSaveFile)
|
ON_COMMAND(ID_FILE_SAVE, OnSaveFile)
|
||||||
ON_COMMAND(ID_HOOK_START, OnHookStart)
|
ON_COMMAND(ID_HOOK_START, OnHookStart)
|
||||||
ON_COMMAND(ID_HOOK_STOP, OnHookStop)
|
ON_COMMAND(ID_HOOK_STOP, OnHookStop)
|
||||||
ON_COMMAND(ID_DXAPP_EXIT, OnExit)
|
ON_COMMAND(ID_DXAPP_EXIT, OnExit)
|
||||||
ON_WM_RBUTTONDOWN()
|
|
||||||
ON_COMMAND(ID_RUN, OnRun)
|
ON_COMMAND(ID_RUN, OnRun)
|
||||||
ON_COMMAND(ID_TRAY_RESTORE, OnTrayRestore)
|
ON_COMMAND(ID_TRAY_RESTORE, OnTrayRestore)
|
||||||
ON_COMMAND(ID_VIEW_STATUS, OnViewStatus)
|
ON_COMMAND(ID_VIEW_STATUS, OnViewStatus)
|
||||||
@ -150,6 +151,8 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
|
|||||||
ON_COMMAND(ID_MOVE_UP, OnMoveUp)
|
ON_COMMAND(ID_MOVE_UP, OnMoveUp)
|
||||||
ON_COMMAND(ID_MOVE_DOWN, OnMoveDown)
|
ON_COMMAND(ID_MOVE_DOWN, OnMoveDown)
|
||||||
ON_COMMAND(ID_MOVE_BOTTOM, OnMoveBottom)
|
ON_COMMAND(ID_MOVE_BOTTOM, OnMoveBottom)
|
||||||
|
ON_WM_RBUTTONDOWN()
|
||||||
|
ON_WM_HOTKEY()
|
||||||
//}}AFX_MSG_MAP
|
//}}AFX_MSG_MAP
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
@ -1105,6 +1108,44 @@ void CDxwndhostView::OnDraw(CDC* pDC)
|
|||||||
ASSERT_VALID(pDoc);
|
ASSERT_VALID(pDoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CDxwndhostView::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
|
||||||
|
{
|
||||||
|
switch(nHotKeyId){
|
||||||
|
case 0: // minimize
|
||||||
|
this->OnWindowMinimize();
|
||||||
|
break;
|
||||||
|
case 1: // restore
|
||||||
|
this->OnWindowRestore();
|
||||||
|
break;
|
||||||
|
case 2: // kill
|
||||||
|
this->OnProcessKill();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VKeyError(char *key)
|
||||||
|
{
|
||||||
|
char Msg[81];
|
||||||
|
sprintf(Msg, "RegisterHotKey(%s) failed err=%d", key, GetLastError());
|
||||||
|
MessageBox(NULL, Msg, "DxWnd error", MB_OK+MB_ICONWARNING);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDxwndhostView::UpdateHotKeys()
|
||||||
|
{
|
||||||
|
// Hot Keys
|
||||||
|
DWORD dwKey;
|
||||||
|
extern Key_Type HKeys[];
|
||||||
|
extern KeyCombo_Type HKeyCombo[];
|
||||||
|
// MessageBox("update global settings", "debug", MB_OK);
|
||||||
|
for(int i=0; HKeys[i].iLabelResourceId; i++){
|
||||||
|
dwKey = GetPrivateProfileInt("keymapping", HKeys[i].sIniLabel, 0, gInitPath);
|
||||||
|
if(dwKey) {
|
||||||
|
UnregisterHotKey(this->GetSafeHwnd(), i);
|
||||||
|
if(!RegisterHotKey(this->GetSafeHwnd(), i, MOD_ALT+MOD_SHIFT+MOD_CONTROL, dwKey)) VKeyError(HKeys[i].sIniLabel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CDxwndhostView::OnInitialUpdate()
|
void CDxwndhostView::OnInitialUpdate()
|
||||||
{
|
{
|
||||||
CListView::OnInitialUpdate();
|
CListView::OnInitialUpdate();
|
||||||
@ -1167,6 +1208,17 @@ void CDxwndhostView::OnInitialUpdate()
|
|||||||
pTitles = &PrivateMaps[0];
|
pTitles = &PrivateMaps[0];
|
||||||
pTargets= &TargetMaps[0];
|
pTargets= &TargetMaps[0];
|
||||||
|
|
||||||
|
// Hot Keys
|
||||||
|
//DWORD dwKey;
|
||||||
|
//extern Key_Type HKeys[];
|
||||||
|
//extern KeyCombo_Type HKeyCombo[];
|
||||||
|
//for(int i=0; HKeys[i].iLabelResourceId; i++){
|
||||||
|
// dwKey = GetPrivateProfileInt("keymapping", HKeys[i].sIniLabel, 0, gInitPath);
|
||||||
|
// if(dwKey) if(!RegisterHotKey(this->GetSafeHwnd(), i, MOD_ALT+MOD_SHIFT+MOD_CONTROL, dwKey)) VKeyError(HKeys[i].sIniLabel);
|
||||||
|
//}
|
||||||
|
UpdateHotKeys();
|
||||||
|
|
||||||
|
// Transient mode
|
||||||
if(gTransientMode){
|
if(gTransientMode){
|
||||||
this->OnRun();
|
this->OnRun();
|
||||||
}
|
}
|
||||||
@ -1651,28 +1703,29 @@ void CDxwndhostView::OnResume()
|
|||||||
|
|
||||||
extern HWND find_main_window(unsigned long);
|
extern HWND find_main_window(unsigned long);
|
||||||
|
|
||||||
void CDxwndhostView::OnWindowMinimize()
|
static void SendMessageToHookedWin(DWORD message)
|
||||||
{
|
{
|
||||||
DXWNDSTATUS DxWndStatus;
|
DXWNDSTATUS DxWndStatus;
|
||||||
if ((GetHookStatus(&DxWndStatus) == DXW_RUNNING) && (DxWndStatus.hWnd!=NULL))
|
HWND TargethWnd;
|
||||||
//::PostMessage(DxWndStatus.hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
|
if (GetHookStatus(&DxWndStatus) == DXW_RUNNING){
|
||||||
::PostMessage(find_main_window(DxWndStatus.dwPid), WM_SYSCOMMAND, SC_MINIMIZE, 0);
|
TargethWnd = (DxWndStatus.hWnd) ? DxWndStatus.hWnd : find_main_window(DxWndStatus.dwPid);
|
||||||
|
::PostMessage(TargethWnd, WM_SYSCOMMAND, message, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDxwndhostView::OnWindowMinimize()
|
||||||
|
{
|
||||||
|
SendMessageToHookedWin(SC_MINIMIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDxwndhostView::OnWindowRestore()
|
void CDxwndhostView::OnWindowRestore()
|
||||||
{
|
{
|
||||||
DXWNDSTATUS DxWndStatus;
|
SendMessageToHookedWin(SC_RESTORE);
|
||||||
if ((GetHookStatus(&DxWndStatus) == DXW_RUNNING) && (DxWndStatus.hWnd!=NULL))
|
|
||||||
//::PostMessage(DxWndStatus.hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
|
|
||||||
::PostMessage(find_main_window(DxWndStatus.dwPid), WM_SYSCOMMAND, SC_RESTORE, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDxwndhostView::OnWindowClose()
|
void CDxwndhostView::OnWindowClose()
|
||||||
{
|
{
|
||||||
DXWNDSTATUS DxWndStatus;
|
SendMessageToHookedWin(SC_CLOSE);
|
||||||
if ((GetHookStatus(&DxWndStatus) == DXW_RUNNING) && (DxWndStatus.hWnd!=NULL))
|
|
||||||
//::PostMessage(DxWndStatus.hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
|
|
||||||
::PostMessage(find_main_window(DxWndStatus.dwPid), WM_SYSCOMMAND, SC_CLOSE, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDxwndhostView::OnTaskbarHide()
|
void CDxwndhostView::OnTaskbarHide()
|
||||||
@ -2211,6 +2264,13 @@ void CDxwndhostView::OnViewPalette()
|
|||||||
pDlg->ShowWindow(SW_SHOW);
|
pDlg->ShowWindow(SW_SHOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CDxwndhostView::OnGlobalSettings()
|
||||||
|
{
|
||||||
|
CGlobalSettings *pDlg = new CGlobalSettings();
|
||||||
|
BOOL ret = pDlg->Create(CGlobalSettings::IDD, this);
|
||||||
|
pDlg->ShowWindow(SW_SHOW);
|
||||||
|
}
|
||||||
|
|
||||||
void CDxwndhostView::OnViewTimeSlider()
|
void CDxwndhostView::OnViewTimeSlider()
|
||||||
{
|
{
|
||||||
CTimeSliderDialog *pDlg = new CTimeSliderDialog();
|
CTimeSliderDialog *pDlg = new CTimeSliderDialog();
|
||||||
@ -2401,7 +2461,7 @@ DWORD WINAPI StartDebug(void *p)
|
|||||||
(strlen(ThInfo->PM->launchpath)>0) ? ThInfo->PM->launchpath : ThInfo->TM->path,
|
(strlen(ThInfo->PM->launchpath)>0) ? ThInfo->PM->launchpath : ThInfo->TM->path,
|
||||||
0, 0, false, DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS, NULL, path, &sinfo, &pinfo)){
|
0, 0, false, DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS, NULL, path, &sinfo, &pinfo)){
|
||||||
sprintf(DebugMessage, "CREATE PROCESS error=%d", GetLastError());
|
sprintf(DebugMessage, "CREATE PROCESS error=%d", GetLastError());
|
||||||
MessageBoxEx(0, DebugMessage, "ERROR", MB_YESNO | MB_ICONQUESTION, NULL);
|
MessageBoxEx(0, DebugMessage, "ERROR", MB_ICONEXCLAMATION|MB_OK, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
CString strEventMessage;
|
CString strEventMessage;
|
||||||
@ -2421,7 +2481,7 @@ DWORD WINAPI StartDebug(void *p)
|
|||||||
if(!Inject(pinfo.dwProcessId, path)){
|
if(!Inject(pinfo.dwProcessId, path)){
|
||||||
// DXW_STRING_INJECTION
|
// DXW_STRING_INJECTION
|
||||||
sprintf(DebugMessage,"Injection error: pid=%x dll=%s", pinfo.dwProcessId, path);
|
sprintf(DebugMessage,"Injection error: pid=%x dll=%s", pinfo.dwProcessId, path);
|
||||||
MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION, NULL);
|
MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL);
|
||||||
}
|
}
|
||||||
#ifdef LOCKINJECTIONTHREADS
|
#ifdef LOCKINJECTIONTHREADS
|
||||||
extern LPVOID GetThreadStartAddress(HANDLE);
|
extern LPVOID GetThreadStartAddress(HANDLE);
|
||||||
@ -2434,11 +2494,11 @@ DWORD WINAPI StartDebug(void *p)
|
|||||||
if(StartAddress){
|
if(StartAddress){
|
||||||
if(!ReadProcessMemory(pinfo.hProcess, StartAddress, &StartingCode, 4, &BytesCount)){
|
if(!ReadProcessMemory(pinfo.hProcess, StartAddress, &StartingCode, 4, &BytesCount)){
|
||||||
sprintf(DebugMessage,"ReadProcessMemory error=%d", GetLastError());
|
sprintf(DebugMessage,"ReadProcessMemory error=%d", GetLastError());
|
||||||
MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION, NULL);
|
MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL);
|
||||||
}
|
}
|
||||||
if(!WriteProcessMemory(pinfo.hProcess, StartAddress, &EndlessLoop, 4, &BytesCount)){
|
if(!WriteProcessMemory(pinfo.hProcess, StartAddress, &EndlessLoop, 4, &BytesCount)){
|
||||||
sprintf(DebugMessage,"WriteProcessMemory error=%d", GetLastError());
|
sprintf(DebugMessage,"WriteProcessMemory error=%d", GetLastError());
|
||||||
MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION, NULL);
|
MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2455,7 +2515,7 @@ DWORD WINAPI StartDebug(void *p)
|
|||||||
if(TargetHandle && StartAddress){
|
if(TargetHandle && StartAddress){
|
||||||
if(!WriteProcessMemory(pinfo.hProcess, StartAddress, &StartingCode, 4, &BytesCount)){
|
if(!WriteProcessMemory(pinfo.hProcess, StartAddress, &StartingCode, 4, &BytesCount)){
|
||||||
sprintf(DebugMessage,"WriteProcessMemory error=%d", GetLastError());
|
sprintf(DebugMessage,"WriteProcessMemory error=%d", GetLastError());
|
||||||
MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION, NULL);
|
MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(TargetHandle) CloseHandle((HANDLE)TargetHandle);
|
if(TargetHandle) CloseHandle((HANDLE)TargetHandle);
|
||||||
|
@ -15,6 +15,7 @@ class CDxwndhostView : public CListView
|
|||||||
{
|
{
|
||||||
protected: // Create from serialization only features.
|
protected: // Create from serialization only features.
|
||||||
CDxwndhostView();
|
CDxwndhostView();
|
||||||
|
afx_msg void OnHotKey(UINT, UINT, UINT);
|
||||||
DECLARE_DYNCREATE(CDxwndhostView)
|
DECLARE_DYNCREATE(CDxwndhostView)
|
||||||
BOOL isUpdated;
|
BOOL isUpdated;
|
||||||
void SaveConfigFile();
|
void SaveConfigFile();
|
||||||
@ -43,6 +44,7 @@ public:
|
|||||||
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
|
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
|
||||||
protected:
|
protected:
|
||||||
virtual void OnInitialUpdate(); // Called once after the initial construction.
|
virtual void OnInitialUpdate(); // Called once after the initial construction.
|
||||||
|
void UpdateHotKeys();
|
||||||
//}}AFX_VIRTUAL
|
//}}AFX_VIRTUAL
|
||||||
|
|
||||||
// Implementation
|
// Implementation
|
||||||
@ -76,6 +78,7 @@ protected:
|
|||||||
afx_msg void OnTaskbarHide();
|
afx_msg void OnTaskbarHide();
|
||||||
afx_msg void OnTaskbarShow();
|
afx_msg void OnTaskbarShow();
|
||||||
afx_msg void OnSort();
|
afx_msg void OnSort();
|
||||||
|
afx_msg void OnGlobalSettings();
|
||||||
afx_msg void OnViewLog();
|
afx_msg void OnViewLog();
|
||||||
afx_msg void OnDeleteLog();
|
afx_msg void OnDeleteLog();
|
||||||
afx_msg void OnDebugView();
|
afx_msg void OnDebugView();
|
||||||
|
BIN
host/host.aps
BIN
host/host.aps
Binary file not shown.
BIN
host/res/alt-ctrl-shift.bmp
Normal file
BIN
host/res/alt-ctrl-shift.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
BIN
host/res/alt.bmp
Normal file
BIN
host/res/alt.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.0 KiB |
BIN
host/resource
BIN
host/resource
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user