mirror of https://github.com/x64dbg/TitanEngine
- added settings to TitanScriptGui
- fixed a bug with the dump file name
This commit is contained in:
parent
4692f86dfd
commit
2ac41ffb3c
|
|
@ -3,18 +3,26 @@
|
||||||
#include "..\SDK\CPP\TitanEngine.h"
|
#include "..\SDK\CPP\TitanEngine.h"
|
||||||
#include "TitanScript.h"
|
#include "TitanScript.h"
|
||||||
|
|
||||||
HINSTANCE hInst;
|
//variables
|
||||||
HWND hLogBox;
|
static HINSTANCE hInst;
|
||||||
TCHAR FileNameTarget[MAX_PATH] = {};
|
static HWND hLogBox;
|
||||||
TCHAR FileNameScript[MAX_PATH] = {};
|
static TCHAR FileNameTarget[MAX_PATH] = {};
|
||||||
|
static TCHAR FileNameScript[MAX_PATH] = {};
|
||||||
|
static TCHAR FileNameIni[MAX_PATH] = {};
|
||||||
|
|
||||||
INT_PTR CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
//functions
|
||||||
bool GetFileDialog(TCHAR[MAX_PATH]);
|
static INT_PTR CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
void AddLogMessage(const char* szLogMessage, eLogType Type);
|
static bool GetFileDialog(TCHAR[MAX_PATH]);
|
||||||
|
static void AddLogMessage(const char* szLogMessage, eLogType Type);
|
||||||
|
static void SettingSet(const TCHAR* name, const TCHAR* value);
|
||||||
|
static void SettingGet(const TCHAR* name, TCHAR* value, int value_size);
|
||||||
|
static bool FileExists(LPCTSTR szPath);
|
||||||
|
static void CreateDummyUnicodeFile(const TCHAR* szFileName);
|
||||||
|
|
||||||
tScripterLoadFileA load_file = NULL;
|
//TitanScript functions
|
||||||
tScripterExecuteWithTitanMistA exec = NULL;
|
static tScripterLoadFileA load_file = NULL;
|
||||||
tScripterSetLogCallback set_log_callback = NULL;
|
static tScripterExecuteWithTitanMistA exec = NULL;
|
||||||
|
static tScripterSetLogCallback set_log_callback = NULL;
|
||||||
|
|
||||||
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
|
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
|
||||||
{
|
{
|
||||||
|
|
@ -29,17 +37,39 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm
|
||||||
|
|
||||||
INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
|
||||||
switch (message)
|
switch (message)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
|
//set icon
|
||||||
HICON hIconLarge = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, LR_DEFAULTSIZE);
|
HICON hIconLarge = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, LR_DEFAULTSIZE);
|
||||||
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIconLarge);
|
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIconLarge);
|
||||||
HICON hIconSmall = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE);
|
HICON hIconSmall = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE);
|
||||||
SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIconSmall);
|
SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIconSmall);
|
||||||
|
|
||||||
|
//initialize variables
|
||||||
hLogBox = GetDlgItem(hWnd, IDC_LOG);
|
hLogBox = GetDlgItem(hWnd, IDC_LOG);
|
||||||
|
int i = GetModuleFileName(hInst, FileNameIni, _countof(FileNameIni));
|
||||||
|
while(FileNameIni[i] != TCHAR('\\') && i)
|
||||||
|
i--;
|
||||||
|
if(i)
|
||||||
|
{
|
||||||
|
int len = lstrlen(FileNameIni);
|
||||||
|
while(FileNameIni[i] != TCHAR('.') && i < len)
|
||||||
|
i++;
|
||||||
|
if(i+1 < len)
|
||||||
|
FileNameIni[i] = TCHAR('\0');
|
||||||
|
}
|
||||||
|
lstrcat(FileNameIni, _T(".ini"));
|
||||||
|
CreateDummyUnicodeFile(FileNameIni);
|
||||||
|
|
||||||
|
//restore last files
|
||||||
|
SettingGet(_T("Target"), FileNameTarget, _countof(FileNameTarget));
|
||||||
|
if(lstrlen(FileNameTarget))
|
||||||
|
SetDlgItemText(hWnd, IDC_TARGETPATH, FileNameTarget);
|
||||||
|
SettingGet(_T("Script"), FileNameScript, _countof(FileNameScript));
|
||||||
|
if(lstrlen(FileNameScript))
|
||||||
|
SetDlgItemText(hWnd, IDC_SCRIPTPATH, FileNameScript);
|
||||||
|
|
||||||
//make sure TitanScript is available
|
//make sure TitanScript is available
|
||||||
if ( !ExtensionManagerIsPluginLoaded( "TitanScript" ) || !ExtensionManagerIsPluginEnabled( "TitanScript" ) )
|
if ( !ExtensionManagerIsPluginLoaded( "TitanScript" ) || !ExtensionManagerIsPluginEnabled( "TitanScript" ) )
|
||||||
|
|
@ -50,7 +80,6 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
#else
|
#else
|
||||||
AddLogMessage("Ensure plugins\\x86\\TitanScript.dll exists !", TS_LOG_ERROR);
|
AddLogMessage("Ensure plugins\\x86\\TitanScript.dll exists !", TS_LOG_ERROR);
|
||||||
#endif //_WIN64
|
#endif //_WIN64
|
||||||
|
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_RUN ), FALSE);
|
EnableWindow(GetDlgItem(hWnd, IDC_RUN ), FALSE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -58,13 +87,14 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
load_file = GetTSFunctionPointer( LoadFileA );
|
load_file = GetTSFunctionPointer( LoadFileA );
|
||||||
exec = GetTSFunctionPointer( ExecuteWithTitanMistA );
|
exec = GetTSFunctionPointer( ExecuteWithTitanMistA );
|
||||||
set_log_callback = GetTSFunctionPointer( SetLogCallback );
|
set_log_callback = GetTSFunctionPointer( SetLogCallback );
|
||||||
|
|
||||||
set_log_callback(&AddLogMessage);
|
set_log_callback(&AddLogMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
|
{
|
||||||
switch (LOWORD(wParam))
|
switch (LOWORD(wParam))
|
||||||
{
|
{
|
||||||
case IDC_BROWSETARGET:
|
case IDC_BROWSETARGET:
|
||||||
|
|
@ -72,6 +102,7 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
if(GetFileDialog(FileNameTarget))
|
if(GetFileDialog(FileNameTarget))
|
||||||
{
|
{
|
||||||
SetDlgItemText(hWnd, IDC_TARGETPATH, FileNameTarget);
|
SetDlgItemText(hWnd, IDC_TARGETPATH, FileNameTarget);
|
||||||
|
SettingSet(_T("Target"), FileNameTarget);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -80,6 +111,7 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
if(GetFileDialog(FileNameScript))
|
if(GetFileDialog(FileNameScript))
|
||||||
{
|
{
|
||||||
SetDlgItemText(hWnd, IDC_SCRIPTPATH, FileNameScript);
|
SetDlgItemText(hWnd, IDC_SCRIPTPATH, FileNameScript);
|
||||||
|
SettingSet(_T("Script"), FileNameScript);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -95,7 +127,7 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
}
|
}
|
||||||
|
|
||||||
wcstombs(buf, FileNameTarget, sizeof(buf));
|
wcstombs(buf, FileNameTarget, sizeof(buf));
|
||||||
if(!exec(buf, "dump.exe"))
|
if(!exec(buf, "")) //TitanScript will generate the output filename
|
||||||
{
|
{
|
||||||
AddLogMessage("Failed to execute", TS_LOG_ERROR);
|
AddLogMessage("Failed to execute", TS_LOG_ERROR);
|
||||||
break;
|
break;
|
||||||
|
|
@ -105,17 +137,24 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
|
{
|
||||||
EndDialog(hWnd, NULL);
|
EndDialog(hWnd, NULL);
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GetFileDialog(TCHAR Buffer[MAX_PATH])
|
static bool GetFileDialog(TCHAR Buffer[MAX_PATH])
|
||||||
{
|
{
|
||||||
OPENFILENAME sOpenFileName = {0};
|
OPENFILENAME sOpenFileName = {0};
|
||||||
const TCHAR szFilterString[] = _T("All Files \0*.*\0\0");
|
const TCHAR szFilterString[] = _T("All Files \0*.*\0\0");
|
||||||
|
|
@ -133,10 +172,40 @@ bool GetFileDialog(TCHAR Buffer[MAX_PATH])
|
||||||
return (TRUE == GetOpenFileName(&sOpenFileName));
|
return (TRUE == GetOpenFileName(&sOpenFileName));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddLogMessage(const char* szLogMessage, eLogType Type)
|
static void AddLogMessage(const char* szLogMessage, eLogType Type)
|
||||||
{
|
{
|
||||||
TCHAR buf[100] = {0};
|
TCHAR buf[100] = {0};
|
||||||
mbstowcs(buf, szLogMessage, sizeof(buf));
|
mbstowcs(buf, szLogMessage, sizeof(buf));
|
||||||
LRESULT cSelect = SendMessage(hLogBox, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)buf);
|
LRESULT cSelect = SendMessage(hLogBox, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)buf);
|
||||||
SendMessage(hLogBox, LB_SETCURSEL, cSelect, NULL);
|
SendMessage(hLogBox, LB_SETCURSEL, cSelect, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void SettingSet(const TCHAR* name, const TCHAR* value)
|
||||||
|
{
|
||||||
|
WritePrivateProfileString(_T("Settings"), name, value, FileNameIni);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SettingGet(const TCHAR* name, TCHAR* value, int value_size)
|
||||||
|
{
|
||||||
|
GetPrivateProfileString(_T("Settings"), name, _T(""), value, value_size, FileNameIni);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool FileExists(LPCTSTR szPath)
|
||||||
|
{
|
||||||
|
DWORD dwAttrib = GetFileAttributes(szPath);
|
||||||
|
return (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CreateDummyUnicodeFile(const TCHAR* szFileName)
|
||||||
|
{
|
||||||
|
//http://www.codeproject.com/Articles/9071/Using-Unicode-in-INI-files
|
||||||
|
if (!FileExists(szFileName))
|
||||||
|
{
|
||||||
|
// UTF16-LE BOM(FFFE)
|
||||||
|
WORD wBOM = 0xFEFF;
|
||||||
|
DWORD NumberOfBytesWritten;
|
||||||
|
HANDLE hFile = CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
WriteFile(hFile, &wBOM, sizeof(WORD), &NumberOfBytesWritten, NULL);
|
||||||
|
CloseHandle(hFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue