Subversion Repositories spk

Rev

Blame | Last modification | View Log | RSS feed

#include <iostream>
#include <windows.h>
#include <TCHAR.h>
#include "..\Direct3D-Hook\Direct3D-Hook.h"

#include "../../Base Engine/Common/String.h"

int main ( int argc, char **argv )
/*int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)*/
{
        String filename;

        
        if ( argc >= 2 )
                filename = argv[1];

        if ( filename.Right(4).lower() != ".exe" )
        {
                if ( filename.Empty() )
                        filename = "x3.exe";
                else
                        filename += "/x3.exe";
        }
        filename = filename.FindReplace ( "/", "\\" );

        std::cout << "Running Program: " << filename.c_str() << std::endl;

        // check if the file exists
        FILE *id = fopen ( filename.c_str(), "r+" );
        if ( !id )
        {
                std::cout<< "Could not find the main executable to run, exiting..." << std::endl;
                return 1;
        }

        fclose ( id );

        // Create/update the registry entry
        HKEY regKey = 0;
        if(ERROR_SUCCESS != RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Direct3D-Hook", 0, 0, 0, KEY_READ | KEY_WRITE,
                0, &regKey, 0))
        {
                std::cout<< "Could not open or create registry key: HKEY_CURRENT_USER\\Software\\Direct3D-Hook"<< std::endl
                        << "Press enter to exit..."<< std::endl;
                std::cin.ignore();
                return 2;
        }

/*      if ( ERROR_SUCCESS != RegSetValueEx(regKey, 0, 0, REG_SZ, 
                reinterpret_cast<char*>((char *)filename.c_str()),
                (filename.Length() + 1) * sizeof(char)) )*/


//      if ( ERROR_SUCCESS != RegSetValueEx(regKey, 0, 0, REG_SZ, _t(filename.c_str()), filename.Length() + 1) )
        if ( ERROR_SUCCESS != RegSetValueExA ( regKey, 0, 0, REG_SZ, reinterpret_cast<BYTE*>("x3.exe"), 6 ) )
        {
                std::cout<< "Could not update key value."<< std::endl
                        << "Press enter to exit..."<< std::endl;
                std::cin.ignore();
                return 3;
        }
        std::cout<< "Hooking Direct3D...";
        InstallHook();
        
        String f = filename;
        for ( int i = 2; i < argc; i++ )
                f += String(" ") + argv[i];

        system ( f.c_str() );

        RemoveHook();

        return 0;
}