AcroEdit의 사용자 도구 기능을 잘 사용해오다..
문득 만들고 싶은 유틸이 있어서.. 기능 구현중 잘 해결이 안되서 문의드립니다.
요점은 도스화면을 캡쳐해서.. 화면에 뿌리는건데..
도스 명령의 수행 시간이 길경우.. 한동안 화면이 멈춰 있다가...
캡쳐 내용이 보여집니다. 소스를 보시면 그럴 수 밖에 없음을 아실텐데
AcroEdit에서는 어떻게 구현했는지 궁금합니다.
제가 Pipe를 잘 쓸줄 몰라서요...
void __fastcall TMainForm::ExeCommand(String command)
{
bool flag;
SECURITY_ATTRIBUTES sa;
HANDLE hwrite, hread;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = true;
// 어노니머스 파이프 생성
flag = CreatePipe(&hread, &hwrite, &sa, 0);
if (!flag)
{
ShowMessage("Fail to open pipe.");
return;
}
// 콘솔어플리케이션 프로세스 실행을 위한 준비
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hwrite; // 표준출력(stdout) 리다이렉션
si.hStdError = hwrite; // 표준에러(stderr) 리다이렉션
// 콘솔어플리케이션 프로세스 실행
// flag = CreateProcess(NULL, command.c_str(), NULL, NULL, true, DETACHED_PROCESS,
// NULL, MakeDir->Text.c_str(), &si, &pi);
flag = CreateProcess(NULL, command.c_str(), NULL, NULL, true, 0,
NULL, MakeDir->Text.c_str(), &si, &pi);
if(!flag)
{
ShowMessage("Fail to create process.");
return;
}
CloseHandle(hwrite);//이것을 하지 않으면 프로세스가 block된다
char buffer[512];
DWORD BytesRead;
AnsiString ResultString;
while(ReadFile(hread, buffer, sizeof(buffer)-1, &BytesRead, NULL) && BytesRead)
{
buffer[BytesRead] = ' ';
ResultString = ResultString + buffer;
}
CloseHandle(hread);
Memo1->Lines->Add(ResultString);
}
문득 만들고 싶은 유틸이 있어서.. 기능 구현중 잘 해결이 안되서 문의드립니다.
요점은 도스화면을 캡쳐해서.. 화면에 뿌리는건데..
도스 명령의 수행 시간이 길경우.. 한동안 화면이 멈춰 있다가...
캡쳐 내용이 보여집니다. 소스를 보시면 그럴 수 밖에 없음을 아실텐데
AcroEdit에서는 어떻게 구현했는지 궁금합니다.
제가 Pipe를 잘 쓸줄 몰라서요...
void __fastcall TMainForm::ExeCommand(String command)
{
bool flag;
SECURITY_ATTRIBUTES sa;
HANDLE hwrite, hread;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = true;
// 어노니머스 파이프 생성
flag = CreatePipe(&hread, &hwrite, &sa, 0);
if (!flag)
{
ShowMessage("Fail to open pipe.");
return;
}
// 콘솔어플리케이션 프로세스 실행을 위한 준비
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hwrite; // 표준출력(stdout) 리다이렉션
si.hStdError = hwrite; // 표준에러(stderr) 리다이렉션
// 콘솔어플리케이션 프로세스 실행
// flag = CreateProcess(NULL, command.c_str(), NULL, NULL, true, DETACHED_PROCESS,
// NULL, MakeDir->Text.c_str(), &si, &pi);
flag = CreateProcess(NULL, command.c_str(), NULL, NULL, true, 0,
NULL, MakeDir->Text.c_str(), &si, &pi);
if(!flag)
{
ShowMessage("Fail to create process.");
return;
}
CloseHandle(hwrite);//이것을 하지 않으면 프로세스가 block된다
char buffer[512];
DWORD BytesRead;
AnsiString ResultString;
while(ReadFile(hread, buffer, sizeof(buffer)-1, &BytesRead, NULL) && BytesRead)
{
buffer[BytesRead] = ' ';
ResultString = ResultString + buffer;
}
CloseHandle(hread);
Memo1->Lines->Add(ResultString);
}
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
15 | 심파일 사용자 평가 내용중에서 질문입니다. [1] | 하얀_고양이 | 2006.08.31 | 23947 |
14 | 화면 분할하는 방법이 있는지요~ [1] | 경훈 | 2006.10.13 | 25381 |
13 | 문법 강조하는 로직을 알고 싶습니다. | 양경철 | 2006.11.06 | 26693 |
12 | 도움말 질문입니다. | 김성준 | 2007.05.29 | 22686 |
11 | 폰트 변경 관련 질문입니다. | 나이스투 | 2007.06.18 | 27374 |
» | 사용자 도구.. 구현 방법에 대한 문의 입니다. | 안운기 | 2007.10.04 | 25596 |
9 | telnet의 view명령어로 txt파일을 열어보면 문장끝에 ^M이라는 게 붙는데...아크로에디터에서 이걸 없앨수 있나요? [1] | 백승훈 | 2007.10.10 | 29955 |
8 | AcroEdit에서 열린 파일의 순서를 정리할 수 있는 기능은 없는지요? | 윤태영 | 2007.12.12 | 28420 |
7 | 윈도우 비스타 관련 [2] | pearleum | 2008.02.19 | 28364 |
6 | WM_QUERYENDSESSION관련 질문 [1] | 광도리 | 2008.04.11 | 26433 |