// FcAlmRun.cpp : AvP[Vp̃Gg |Cg̒`
//

#include "stdafx.h"



//------------------------------------------------------------------------------
//	萔`
//------------------------------------------------------------------------------

//	\tgRAS@\A[BIT
#define	FCSRAS_ALARM_SMART		(0x0001)			// SMART
#define	FCSRAS_ALARM_FAN		(0x0002)            // t@
#define	FCSRAS_ALARM_TEMP		(0x0004)            // x
#define	FCSRAS_ALARM_VOLT		(0x0008)            // d
#define	FCSRAS_ALARM_POWER		(0x0010)			// ʓd
#define	FCSRAS_ALARM_PCI		(0x0020)            // PCIpeB


#define	MAX_CHAR	_MAX_PATH						// ő啶
#define	FCSRAS_INIFILE			"FcAlmRun.INI"      // Nt@CۑINIt@C



//------------------------------------------------------------------------------
//	֐`
//------------------------------------------------------------------------------
void FCRunProcess(LPSTR pSection);

//------------------------------------------------------------------------------
//	ϐ`
//------------------------------------------------------------------------------

TCHAR szFcAlmRunIniFile[_MAX_PATH];




int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow )
{
 	// TODO: ̈ʒuɃR[hLqĂB
	INT	intAlarmBit;								// ۑpϐ
	INT	intWaringBit;								// ۑpϐ
	DWORD dwChar;
	TCHAR *pDirExe;
	TCHAR szDirExe[_MAX_PATH];	// st@C̃pX

	
	// st@C̃tpX擾B
	dwChar = GetModuleFileName( NULL, szDirExe , _MAX_PATH);	
	// st@C폜i납猟\܂Łj
	pDirExe  = &szDirExe[dwChar];			
	while (*pDirExe != '\\')
	{
		*pDirExe = NULL;
		pDirExe--;
	}
	// NvZXۑpINIt@C쐬
	sprintf(szFcAlmRunIniFile,"%s%s",szDirExe,FCSRAS_INIFILE);	
	
	
	// ̕16if[^Ƃĕϊ
	sscanf(lpCmdLine,"%x %x",&intAlarmBit,&intWaringBit);

	// X}[gG[̃`FbN
	if(intAlarmBit & FCSRAS_ALARM_SMART) {
		FCRunProcess("ALARM_SMART");			
	}
	// FANA[̃`FbN
	if(intAlarmBit & FCSRAS_ALARM_FAN) {
		FCRunProcess("ALARM_FAN");						
	}

	// xA[̃`FbN
	if(intAlarmBit & FCSRAS_ALARM_TEMP) {
		FCRunProcess("ALARM_TEMP");
	}

	// PCIpeBA[̃`FbN
	if(intAlarmBit & FCSRAS_ALARM_PCI) {
		FCRunProcess("ALARM_PCI");			
	}

	// x[jÕ`FbN
	if(intWaringBit & FCSRAS_ALARM_TEMP) {
		FCRunProcess("WARNING_TEMP");						
	}

	// ʓdԃ[jO
	if(intWaringBit & FCSRAS_ALARM_POWER) {
		FCRunProcess("WARNING_POWER");									
	}



	
	return 0;
}




void FCRunProcess
(
	LPSTR pSection
 )
{

	TCHAR szProcessName[MAX_CHAR];
	TCHAR szWorkDir[MAX_CHAR];
	TCHAR szArgs[MAX_CHAR];
	static STARTUPINFO siStartInfo ;
	static PROCESS_INFORMATION piProcInfo ;
	BOOL	bRet;

	// ݒt@Cs擾
	GetPrivateProfileString(						// w肳ꂽZNV當擾
				pSection,							// ZNV
				"PROCESS",							// L[
				NULL,								// ftHg
				szProcessName,						// XgO
				sizeof(szProcessName),				// obt@TCY
				szFcAlmRunIniFile);					// tpX 

	

	// ݒt@CƃtH_擾
	GetPrivateProfileString(						// w肳ꂽZNV當擾
				pSection,							// ZNV
				"WORKFOLDER",						// L[
				NULL,								// ftHg
				szWorkDir,							// XgO
				sizeof(szWorkDir),					// obt@TCY
				szFcAlmRunIniFile);					// tpX 

	

	// ݒt@C擾
	GetPrivateProfileString(						// w肳ꂽZNV當擾
				pSection,							// ZNV
				"ARGS",								// L[
				NULL,								// ftHg
				szArgs,								// XgO
				sizeof(szArgs),						// obt@TCY
				szFcAlmRunIniFile);					// tpX 

	strcat (szProcessName," ");
	strcat (szProcessName, szArgs);

	if (strlen(szWorkDir) == 0) {
		bRet = CreateProcess(NULL,  szProcessName, NULL, NULL, FALSE, 
			      CREATE_NEW_PROCESS_GROUP ,NULL, NULL, &siStartInfo, &piProcInfo);
	} else {
	
		bRet = CreateProcess(NULL,  szProcessName, NULL, NULL, FALSE, 
			      CREATE_NEW_PROCESS_GROUP ,NULL, szWorkDir, &siStartInfo, &piProcInfo);
	}
	// vZX̎s
	if(bRet)
	{
		// svZX̃nhԂB
		CloseHandle(piProcInfo.hThread) ;
		CloseHandle(piProcInfo.hProcess) ;
	}


}