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