Windows_/Windows_Source

CreateProcess 함수 예제 소스코드

sosal 2014. 7. 24. 00:50
반응형

/*

 * http://sosal.kr/

 * made by so_Sal

 */



CreateProcess 라는 함수를 이용하여
Notepad를 실행시키는 간단한 소스입니다.
이해가 가지 않는 부분이 있다면
아래 링크를 참조하세요.

LINK_

====================== CreateProcess ======================

#include<stdio.h>
#include<windows.h>
#include<tchar.h>

#define DIR_LEN BUFSIZ
//BUFSIZ는 운영체제마다 다른 크기를 가지고 있습니다.
//한번 크기를 출력해보시는것도 좋겠네요.

int _tmain(int argc, TCHAR* argv[]){
 STARTUPINFO si = {0,};    //구조체 선언, 초기화
 PROCESS_INFORMATION pi;
 
 si.cb = sizeof(si);
 si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE;
 //Flags 값들이 여러가지가 있습니다.
 //STARTF_USEPOSITION :: dwX, dwY 위치 사용
 //STARTF_USESIZE     :: dwXSize, dwYSize 사용
 //Flags 값이 주어지지 않는 si구조체 값은
 //새로 만들어지는 프로세스에 영향을 주지 않습니다.

 si.dwX = 100;
 si.dwY = 100;
 si.dwXSize = 300;
 si.dwYSize = 300;  //dw ~ 는 사실 잘 쓰이지 않습니다.

 si.lpTitle = _T(" Child process! ");
 
 TCHAR command[] = _T("notepad 10 10");
 //10 10은 argv[]로 들어가겠죠, 아래 결과를 보시면
 //notepad의 이름으로 들어간다는걸 확인하실 수 있습니다.

 BOOL state;

 state = CreateProcess(
     NULL, //여기에 이름을 넣을 수 있습니다.
     command, // 경로를 System에 해줬기 때문에 notepad가 열릴 수 있죠!
     NULL,NULL,
     TRUE, //부모프로세스중 상속가능한 핸들 상속
     CREATE_NEW_CONSOLE, //dwCreationFlags
     NULL,NULL,
     &si, //STARTUPINFO 구조체 정보를 위에서 만들어줬죠.
     &pi  //이젠 프로세스의 정보를 가져올때 이 구조체를 사용!
 );

 if(state!=0){
     _fputts(_T("Creation OK! \n"), stdout);
 }
 else{
     _fputts(_T("Creation Fail! \n"), stdout);
 }

 return 0;
}