시작 전 소개

뇌를 자극하는 윈도우즈 프로그래밍
1챕터 정리본 바로가기
2챕터 정리본 바로가기
3챕터 정리본 바로가기
4챕터 세션1 정리본
4챕터 세션 2 정리본
5챕터 세션 1-2-3 정리본
5챕터 세션 4-5 정리본
6챕터 세션1
6챕터 세션2
6챕터 세션3

명령 프롬포트 프로젝트 기능 추가

echo와 start구현하기

우선 start명령어는 입력된 명령어를 별도의 명령 프롬포트에 띄운 상태에서 실행하도록 요구하는 명령어이다.
따라서, 나는 createProcess를 사용하여 start명령어를 만들었고 echo는 그냥 직관적으로 만들었다.

코드 부분 공유

start부분은 함수를 따로 파서 createProcess()용으로 사용하였다.

  STARTUPINFO si = { 0, };
    PROCESS_INFORMATION pi;
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE;
    si.dwX = 100;
    si.dwY = 200;
    si.dwXSize = 300;
    si.dwYSize = 200;

앞에서 작성한 것처럼 이런 구조체를 만든 뒤 create를 해주었다.
그리고 명령어 처리에서 else if를 할 때 주의점은 무조건 start면 void start함수를 실행하는 것이 아니라 tokenNum을 기준으로 start를 할지 echo모드로 들어갈지 결정하도록 해주었다.

유의사항

코드를 직접 첨부할까 고민하다 그보다는 몇가지 예외사항 처리에 대해 남기는 것이 좋을 것 같아서 직접 정리했다.
📌echo 처리시 유의사항
echo의 앞에 start echo 내용 이런 식으로 올 수도 있다.
나는 맨 처음 그냥 echo가 입력되면 echo모드로 들어가게 작동하는 간단한 방식으로 로직을 구현하였는데, 이후 책에 작성된 코드를 보고 전체를 갈아 엎었다.
토큰Num에 대한 처리
위에 말한 부분과 연결된 지점이다.
만약 start echo 블라블라가 입력된다면 잘 split을 해주어야 제대로된 출력을 뽑을 수 있다.
📌start 처리시 유의사항
프로세스를 생성하고 핸들러를 어디에서 닫아야할지 잘 고려해야한다.
start가 입력되었다고해서 무조건 프로세스를 생성하는 것이 아닐 수 있다.
위에 예시와 같이 start 뒤에 실질적으로 필요한 명령이 오는 예외사항을 대비해야한다.
내가 짠 코드를 첨부하니 위 게시물 md파일이 140줄이 넘어가서 나와 비슷한 스타일인데, 나보다 더 정리를 잘해주신 블로그 링크를 첨부한다.

좋은 예시

좋은 예시 코드

댓글남기기