본문 바로가기
장난감

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

by umaking 2010. 6. 10.

매번 바이너리를 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