/*

 * 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;
}

Posted by sosal sosal

댓글을 달아 주세요

  1. 2020.09.30 22:41

    여기서 경로를 system에 해줬다는것이 무슨 뜻인가요? , notepad 대신 다른 어플을 띄우려면 뭐뭐 있는지 알 수 있을까요?