|
devpia에서 찾아고 흔한 함수 사용합니다. 단지 사용을 하지 않아서... ㅋㅋㅋㅋ
옛날 DOS나 ffmeg 같은 것,,, 윈도우에서 만든 것처럼 동작하게 할 수 있습니다.
자바에 Runtime을 보고 윈도우에도 이런 기능이 없는 것인지 찾다가 찾은 것입니다.
아래의 소스는 저번에 후배에게 주었는 던 것인데.... consol 출력 내용을 메모장으로 들어오게 하는 것입니다.
그냥 보면 사용할 수 있습니다...
참고하세요.....
AnsiString csExecute = csExeName + " " + csArguments;
SECURITY_ATTRIBUTES secattr;
ZeroMemory(&secattr,sizeof(secattr));
secattr.nLength = sizeof(secattr);
secattr.bInheritHandle = TRUE;
HANDLE rPipe, wPipe;
//Create pipes to write and read data
CreatePipe( &rPipe, &wPipe, &secattr, 0 );
STARTUPINFO sInfo;
ZeroMemory(&sInfo,sizeof(sInfo));
PROCESS_INFORMATION pInfo;
ZeroMemory(&pInfo,sizeof(pInfo));
sInfo.cb=sizeof(sInfo);
sInfo.dwFlags=STARTF_USESTDHANDLES;
sInfo.hStdInput=NULL;
sInfo.hStdOutput=wPipe;
sInfo.hStdError=wPipe;
//Create the process here.
CreateProcess( csExeName.c_str(), csArguments.c_str() ,0, 0, TRUE, NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW, 0, 0, &sInfo, &pInfo );
CloseHandle(wPipe);
//now read the output pipe here.
char buf[1025] = "";
DWORD reDword = 0;
AnsiString m_csOutput, csTemp;
bool res = NULL;
m_csOutput = "";
csTemp = "";
Memo1->Lines->Add( "START..." );
Memo1->Lines->Add( "" );
do
{
//memset( buf, 0x00, 1025 );
res=::ReadFile(rPipe,buf,1024,&reDword,0);
if( reDword )
{
Memo1->Lines->Add( buf );
Memo1->Lines->Add( "--------------------------------------------------" );
}
}
while(res);
Memo1->Lines->Add( "" );
Memo1->Lines->Add( "STOP..." );
return m_csOutput;
bluewing 님이 쓰신 글 :
: 일종의 간단한 쉘 프로그램을 짜야 합니다.
:
: 예를 들면,
: delete ./myfolder/*.back
:
: 라는 문자열을 OS에게 날려서 실행시킨 후,
: 그게 실행될때 나타나는 문자열을 사용자에게 보여준다든가, 문자열을 화일로 저장한다든가 하는 작업을 하려고 합니다. 마치 Edit plus에서 외부 tool을 실행시키고 실행에 따른 DOS출력 문자열들을 사용자가 볼 수 있게 하는 식의 그런 기능을 만드려는 거죠.
:
: DOS명령어를 OS에게 던지는 것은 많이 해 봤지만,
: 결과 문자열을 가로채는 건 어떻게 해야 하는 건지 감이 안 잡히네요.
:
: 인터넷에서 검색해보려고 해도 검색어를 뭘로 해야 할 지 막막하네요. 쩝....
: 참고자료나 예제코드가 있는 웹 페이지 링크만이라도 부탁합니다.
|