티스토리 뷰
매번 바이너리를 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 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 한영전환
- java
- IViewObject
- Bada
- TShellWindows
- capture
- TensorFlow
- CppWebBrowser
- IHTMLElement
- regexp
- BCB
- Atom
- Profiler
- Copilot
- SCM
- GNUStep
- Python
- FindWindows
- ollama
- 프로젝트
- javascript
- CUDA
- CI
- Eclipse
- jupyter
- hosts
- VCL
- Swift Package Manager
- Xcode
- cudnn
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
글 보관함