badaSDK로 만든 binary를 bada시뮬레이터에 띄워보자는 취지

2010. 6. 10. 13:18 장난감

매번 바이너리를 import하는 것이 번거러워 맹글었는데,
물론 메뉴얼에 수동으로 동작하는 방법에 대하여 짦막하게 언급은 되어 있다 하지만, 게으른 나 이기에
자동화 시키기로 했다는...

기능은 이렇다.
1. Simulator 실행
  - 특정 binary의 위치를 읽어들인다.
  - unzip을 하여 manifest.xml, bin디렉토리내의 *.exe파일을 풀어낸다.
  - Simulator, PhoneShell.dll를 위 정보로 실행시킨다.
2. Simulator 종료
  - Simulator가 실행 여부를 표시하고 강제종료를 활성화 시킨다.
  - 사용자의 의도에 의하여 강제종료를 행한다.




//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "ZipForge"
#pragma resource "*.dfm"
TForm1 *Form1;
#define ROOT_PATH "c:\\temp_uma"

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
	xmlFile = "";
	exeFile = "";
}

//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
	AnsiString tmp = "";
	tmp = AnsiString(ROOT_PATH) + "\\" + xmlFile;
	if(!tmp.IsEmpty())
	{
		OutputDebugString(("DEL: " + tmp).c_str());
		DeleteFile(tmp);
	}
	tmp = AnsiString(ROOT_PATH) + "\\" + exeFile;
	if(!tmp.IsEmpty())
	{
		OutputDebugString(("DEL: " + tmp).c_str());
		DeleteFile(tmp);
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::XMLLoad()
{
	TSearchRec sr;
	AnsiString tmpFile;
	xmlFile = "";
	exeFile = "";
	AnsiString id = "";

	if( FileOpenDialog1->Execute() )
	{
		Memo1->Lines->Clear();
		Memo1->Lines->Add("File: " + FileOpenDialog1->FileName );
		MkDir(ROOT_PATH);
		ZipForge1->FileName = FileOpenDialog1->FileName;
		ZipForge1->OpenArchive(fmOpenRead);
		ZipForge1->BaseDir = ROOT_PATH;
		ZipForge1->ExtractFiles("*manifest.xml");
		ZipForge1->ExtractFiles("*.exe");
		ZipForge1->CloseArchive();
		DeleteFile( AnsiString(ROOT_PATH) + "\\*.*" );
	}
	if(FindFirst(AnsiString(ROOT_PATH) + "\\*.*", 0, sr) == 0)
	{
		do
		{
			tmpFile = sr.Name.UpperCase();
			if(tmpFile.AnsiPos(".EXE") > 0)
			exeFile = sr.Name;
			if(tmpFile.AnsiPos(".XML") > 0)
			 xmlFile = sr.Name;
		} while (FindNext(sr) == 0);
		FindClose(sr);
	}
	Memo1->Lines->Add("exe: " + exeFile);
	Memo1->Lines->Add("xml: " + xmlFile);
	if(xmlFile.IsEmpty())
	return;
	XMLDocument1->LoadFromFile(AnsiString(ROOT_PATH) + "\\" + xmlFile);
	_di_IXMLNode rootNode = XMLDocument1->DocumentElement;
	if(rootNode == NULL)
	return;
	_di_IXMLNode childNode = rootNode->ChildNodes->FindNode("Id");
	if(childNode == NULL)
	return;
	id = childNode->GetNodeValue();
	Memo1->Lines->Add("AppId: " + id);
	AnsiString param = "";
	param += " -s ";
	param += "C:\\bada\\1.0.0b3\\Model\\Wave_LP1\\Simulator\\PhoneShell.dll";
	param += " -d Generic.dbi -p 6200 -i ";
	param += id;
	param += " -l ";
	param += exeFile;
	ShellExecute(0, "open", "Simulator.exe", param.c_str(),
	"C:\\bada\\1.0.0b3\\Model\\Wave_LP1\\Simulator", SW_SHOWNORMAL);
	// SIM_EXE=C:\bada\1.0.0b3\Model\Wave_LP1\Simulator\Simulator.exe
	// DLL_EXE=C:\bada\1.0.0b3\Model\Wave_LP1\Simulator\PhoneShell.dll
	//%SIM_EXE% -s %DLL_EXE% -d Generic.dbi -p 6200 -i %1 -l %2
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
XMLLoad();
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
	HWND hWnd = NULL;
	DWORD ProcessId;
	hWnd = FindWindow(NULL, "bada Simulator");
	GetWindowThreadProcessId(hWnd, &ProcessId);
	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);
	if(hProcess)
	{
		TerminateProcess(hProcess,0);//또는 ExitProcess 사용해서 죽임..
	}
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
	HWND hWnd = NULL;
	hWnd = FindWindow(NULL, "bada Simulator");
	if(hWnd == NULL)
	{
		StaticText1->Caption = "...";
		Button1->Enabled = true;
		Button2->Enabled = false;
	}
	else
	{
		StaticText1->Caption = "Simulator 가동 중";
		Button1->Enabled = false;
		Button2->Enabled = true;
	}
}
//---------------------------------------------------------------------------

 

' 장난감' 카테고리의 다른 글

Jar정보 검색  (0) 2010.08.12
redmine 을 설치하다.  (0) 2010.07.08
MAC에서 weblogic을 돌려보자.  (0) 2010.01.06
GNUstep & DEV-C++ 통합 환경 구성  (5) 2009.10.23
GNUstep for Windows  (3) 2009.10.22