1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
#include <algorithm>
#include <string>
#include <windows.h>
using namespace std;
int main( int argc, char **argv )
{
TCHAR* exepath;
TCHAR* cmdline;
STARTUPINFO startup_info;
PROCESS_INFORMATION process_info;
if (argc < 2) return 1;
cmdline = GetCommandLine();
#ifdef _UNICODE
TCHAR** wargv = CommandLineToArgW( cmdline, &argc );
exepath = wargv[ 1 ];
LocalFree( wargv );
#else
exepath = argv[ 1 ];
#endif
cmdline = search(
cmdline, cmdline +lstrlen( cmdline ),
exepath, exepath +lstrlen( exepath )
);
fill_n( (char*)&process_info, sizeof( PROCESS_INFORMATION ), 0 );
fill_n( (char*)&startup_info, sizeof( STARTUPINFO ), 0 );
startup_info.cb = sizeof( STARTUPINFO );
AllocConsole(); // make sure there is a console associated with this process
if (!CreateProcess(
exepath,
cmdline,
NULL,
NULL,
TRUE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&startup_info,
&process_info
))
return 2;
CloseHandle( process_info.hThread );
// wait for the child program to terminate
WaitForSingleObject( process_info.hProcess, INFINITE );
// Wait for the user
const TCHAR* prompt = TEXT( "Press any key to continue..." );
DWORD count;
WriteConsole(
GetStdHandle( STD_OUTPUT_HANDLE ),
prompt,
lstrlen( prompt ),
&count,
NULL
);
WaitForSingleObject(
GetStdHandle( STD_INPUT_HANDLE ),
INFINITE
);
return 0;
}
| |