BOOL CreateProcess (
p144 코드 사진
ipApplicationNameipCommandLinelpProcessAttributes NULL을 전달하고, 이러한 경우 디폴트(기본적인) 보안 속성이 지정된다.lpThreadAttributes NULL을 사용하여 기본 보안 속성을 사용합니다.bInheritHandle TRUE를 설정하여 핸들 상속을 허용합니다.dwCreationFlags lpEnvironment NULL을 지정하면 부모 프로세스의 환경 블록을 상속받습니다.lpCurrentDirectoryNULL을 지정하면 부모 프로세스의 현재 디렉터리를 상속받습니다.lpStartupInfo STARTUPINFO구조체 변수를 초기화한 다음에 이 변수의 포인터를 인자로 전달한다.STARTUPINFO 구조체 변수는 생성하는 프로세스의 속성을 지정할떄 사용된다.lpProcessInformationPROCESS_INFORMATION 구조체에 변수의 주소값을 인자로 전달한다./*
AdderProcess.cpp
프로그램 설명: main 함수의 전달인자를 합산하는 프로그램
*/
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
int _tmain(int argc, TCHAR* argv[])
{
DWORD val1, val2;
val1=_ttoi(argv[1]); // 1
val2=_ttoi(argv[2]); // 2
_tprintf(_T("%d + %d = %d \n"), val1, val2, val1+val2);
_gettchar(); // 3 프로그램의 실행을 잠시 멈추기 위해
return 0;
}
#ifdef _UNICODE
#define _ttoi _wtoi
#define _gettchar getwchar
#else
#define _ttoi atoi
#define _gettchar getchar
#endif
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#define DIR_LEN MAX_PATH+1
int _tmain(int argc, TCHAR* argv[])
{
STARTUPINFO si = { 0, }; // 1
PROCESS_INFORMATION pi;
// 2
si.cb = sizeof(si); // 3
si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE; // 4
si.dwX = 100; // 5
si.dwY = 200; // 6
si.dwXSize = 300;
si.dwYSize = 200;
si.lpTitle = _T("I am a boy!"); // 7
TCHAR command[] = _T("AdderProcess.exe 10 20");
TCHAR cDir[DIR_LEN];
BOOL state;
GetCurrentDirectory(DIR_LEN, cDir); // 9 현재 디렉토리 확인
_fputts(cDir, stdout); // 10
_fputts(_T("\n"), stdout);
SetCurrentDirectory(_T("C:\\WinSystem")); // 11 디렉토리 변경
GetCurrentDirectory(DIR_LEN, cDir); // 변경된 디렉토리 확인
_fputts(cDir, stdout);
_fputts(_T("\n"), stdout);
state = CreateProcess( // 프로세스 생성
NULL, // 실행파일의 이름
command, // main 함수에 전달될 문자열
NULL, NULL, TRUE,
CREATE_NEW_CONSOLE,
NULL, NULL, &si, &pi // 8
); //CreateProcess
if (state != 0)
{
_fputts(_T("Creation OK! \n"), stdout);
}
else
{
_fputts(_T("Creation Error! \n"), stdout);
}
return 0;
}
STARTUPINFO 구조체 변수의 생성 및 초기화typedef struct _STARTUPINFO {
DWORD cb; // 구조체 크기의 크기
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle; // 콘솔 윈도우 타이틀 바 제목
DWORD dwX; // 프로세스 윈도우의 X 좌표
DWORD dwY; // 프로세스 윈도우의 Y 좌표
DWORD dwXSize; // 프로세스 윈도우의 가로 길이
DWORD dwYSize; // 프로세스 윈도우의 세로 길이
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags; // 설정된 멤버의 정보
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO;
DWORD GetCurrentDirectory(
DWORD nBufferLength,
LPTSTR lpBuffer
);
If the function fails, the return value is zero.
BOOL SetCurrentDirectory (
LPCTSTR lpPathName
);
If the function fails, the return value is zero.
1차 24.01.03
2차 24.01.04
3차 24.01.05
4차 24.01.09
5차 24.01.10