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