- ue_starter.c
- make_vs.bat
- usage.txt
- ue_starter.b64
ue_starter.c
// _ __ _____ _________ _ __ _ __ ___
// | '_ \ / _ \ \ /\ / /_ / _ \| '__| '__/ _ \
// | | | | (_) \ V V / / / (_) | | | | | (_) |
// |_| |_|\___/ \_/\_/ /___\___/|_| |_| \___/
//
#include
// #pragma comment(lib, "kernel32.lib")
// #pragma comment(lib, "user32.lib")
// #define UESTUDIO
// #define ULTRAEDIT
// #define ULTRACOMPARE
#ifdef UESTUDIO
#define APP_FILENAME TEXT("UEStudio.exe")
#define APP_TITLE TEXT("UEStudio")
#elif defined(ULTRAEDIT)
#define APP_FILENAME TEXT("Uedit32.exe")
#define APP_TITLE TEXT("UltraEdit")
#elif defined(ULTRACOMPARE)
#define APP_FILENAME TEXT("uc.exe")
#define APP_TITLE TEXT("UltraCompare")
#else
#error Specify Application
#endif
#define TRIAL_WND_CLASS "#32770"
#define TRIAL_WND_NAME "Trial Period Expiring"
#define INIT_WAIT_TIMEOUT 5000
#define TRY_FIND_TIMEOUT 5000
#define TRY_FIND_SLEEP 10
#define TRY_FIND_COUNT (TRY_FIND_TIMEOUT / TRY_FIND_SLEEP)
enum
{
RESULT_OK = 0,
RESULT_ERROR_CANT_RUN,
RESULT_ERROR_INIT_HOOK,
RESULT_ERROR_TRIAL_WND_NOT_FOUND,
RESULT_ERROR_MAIN_WND_NOT_FOUND,
RESULT_ERROR_CANT_ENABLE_MAIN_WND
};
const TCHAR *MESSAGE[] =
{
0,
TEXT("Cannot run ") APP_TITLE TEXT("."),
TEXT("Amicus certus in re incerta cernitur."),
TEXT("Ibi semper est victoria, ubi concordia est."),
TEXT("Oderint, dum metuant."),
TEXT("Amor non est medicabilis herbis.")
};
// Use ASM -> Disable CRT version
__inline
void _zeroMemory(void *p, size_t count)
{
_asm
{
push ecx
push edi
mov al, 0
mov ecx, count
mov edi, p
rep stosb
pop edi
pop ecx
}
}
// Return process handle
HANDLE runProcess(/* const */ TCHAR *path)
{
STARTUPINFO si;
_zeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
_zeroMemory(&pi, sizeof(pi));
if (!CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
return NULL;
CloseHandle(pi.hThread);
return pi.hProcess;
}
TCHAR* skipCommandLinePath(TCHAR *s)
{
if (TEXT('"') == *s)
{
++s;
for (; *s && *s != TEXT('"'); ++s);
if (TEXT('"') == *s)
++s;
}
else
for (; *s > TEXT(' '); ++s);
for (; *s && *s <= TEXT(' '); ++s);
return s;
}
int work(TCHAR *commandLine)
{
TCHAR path[] = APP_FILENAME;
HANDLE hProcess = runProcess(commandLine && commandLine[0] != TEXT('\0') ? commandLine : path);
if (!hProcess)
return RESULT_ERROR_CANT_RUN;
// Wait until app has finished initialization
if (WaitForInputIdle(hProcess, INIT_WAIT_TIMEOUT) != 0)
{
CloseHandle(hProcess);
return RESULT_ERROR_INIT_HOOK;
}
CloseHandle(hProcess);
HWND hTrialWnd = NULL;
for (int i = TRY_FIND_COUNT; i-- && !hTrialWnd; Sleep(TRY_FIND_SLEEP))
{
hTrialWnd = FindWindowA(TRIAL_WND_CLASS, TRIAL_WND_NAME);
if (hTrialWnd)
break;
}
if (!hTrialWnd)
return RESULT_ERROR_TRIAL_WND_NOT_FOUND;
for (int i = TRY_FIND_COUNT; i-- && !IsWindowVisible(hTrialWnd); )
{
UINT flags = SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING |
SWP_NOSIZE | SWP_NOZORDER | SWP_NOREDRAW;
SetWindowPos(hTrialWnd, NULL, -2000, -2000, 0, 0, flags);
Sleep(TRY_FIND_SLEEP);
}
// LONG exStyle = GetWindowLong(hTrialWnd, GWL_EXSTYLE);
// exStyle = exStyle & ~WS_EX_DLGMODALFRAME;
// SetWindowLongA(hTrialWnd, GWL_EXSTYLE, exStyle);
HWND hMainWnd = GetParent(hTrialWnd);
if (!hMainWnd)
return RESULT_ERROR_MAIN_WND_NOT_FOUND;
if (!IsWindowEnabled(hMainWnd))
{
EnableWindow(hMainWnd, TRUE);
if (!IsWindowEnabled(hMainWnd))
return RESULT_ERROR_CANT_ENABLE_MAIN_WND;
}
if (IsWindowVisible(hTrialWnd))
{
ShowWindow(hTrialWnd, SW_HIDE);
for (int i = TRY_FIND_COUNT; i-- && IsWindowVisible(hTrialWnd); )
Sleep(TRY_FIND_SLEEP);
SetForegroundWindow(hMainWnd);
}
return RESULT_OK;
}
void WINAPI main()
{
TCHAR *commandLine = GetCommandLine();
commandLine = skipCommandLinePath(commandLine);
int result = work(commandLine);
if (result != RESULT_OK)
MessageBox(NULL, MESSAGE[result], TEXT("Error"), MB_OK | MB_ICONERROR);
ExitProcess(result);
}
make_vs.bat
:: _ __ _____ _________ _ __ _ __ ___
:: | '_ \ / _ \ \ /\ / /_ / _ \| '__| '__/ _ \
:: | | | | (_) \ V V / / / (_) | | | | | (_) |
:: |_| |_|\___/ \_/\_/ /___\___/|_| |_| \___/
@echo off
set DEFINE_APP=UESTUDIO
set OUT_FILENAME=uestudio
call :MAKE
set DEFINE_APP=ULTRAEDIT
set OUT_FILENAME=uedit
call :MAKE
set DEFINE_APP=ULTRACOMPARE
set OUT_FILENAME=ucompare
call :MAKE
goto :EOF
:MAKE
:: Base for XP Toolset
set SDK71PATH=%ProgramFiles%\Microsoft SDKs\Windows\7.1A
path %SDK71PATH%\Bin;%PATH%
set CL=/W3 /O1 /GL /GF /GS- /MT /EHsa- /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D_USING_V110_SDK71_
set CL=%CL% /D "_UNICODE" /D "UNICODE"
set LINK=/LTCG /OPT:REF /OPT:ICF /DYNAMICBASE:NO /NXCOMPAT:NO /SUBSYSTEM:WINDOWS,5.01 /FIXED /NODEFAULTLIB /MERGE:.rdata=.text /ENTRY:main
set INCLUDE=%INCLUDE%;%SDK71PATH%\Include
set LIB=%LIB%;%SDK71PATH%\Lib
:: Prepare VC++2013 compiler
:: call "%VS120COMNTOOLS%\vsvars32.bat"
:: Prepare VC++2015 compiler
call "%VS140COMNTOOLS%\vsvars32.bat"
if errorlevel 1 goto :EOF
::Compile
cl.exe /nologo /D %DEFINE_APP% ue_starter.c "kernel32.lib" "user32.lib" /link /NOLOGO /OUT:start_%OUT_FILENAME%.exe && del *.obj
usage.txt
1) Copy starter to .exe folder:
[c:\Program Files\..\UEStudio]
UEStudio.exe
start_uestudio.exe
2) Or set command line parameter in shortcut:
start_uestudio.exe "c:\Program Files\..\UEStudio.exe"
Note: Use icon from UEStudio.exe
ue_starter.b64
MIME-Version: 1.0
Content-Type: application/octet-stream; name="ue_starter.7z"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="ue_starter.7z"
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
No comments:
Post a Comment