#pragma once
 
#include "tchar.h"
#include "windows.h"

class CProcess
{
public:
	// 管道类型
	enum PipeType { pIn, pOut, pErr };
	// 读写方式
	enum Direction { Read, Write };
	// 程序执行的方式
	enum ExecType { ASYNC, SYNC };

	CProcess();
	CProcess(ExecType execType);
	~CProcess();
	// 创建一个指定执行方式的进程类
	BOOL Create(ExecType execType);
	// 执行脚本
	BOOL Execute(LPCTSTR Command);
	// 进程类是否正常
	BOOL IsOk() { return m_hPipes[pIn][Write] != INVALID_HANDLE_VALUE; }
	// 获取进程id
	DWORD GetPid() { return m_dwProcessId; }
	// 从管道读取一行
	size_t ReadLine(LPVOID lpBuffer, size_t len, char seq = '\n');
	// 向管道写入
	size_t WriteSome(LPVOID lpBuffer, size_t len);
	// 关闭管道
	void ClosePipes();
protected:
	BOOL CreatePipes();
	
private:
	DWORD m_dwProcessId;
	HANDLE m_hPipes[3][2];
	ExecType m_execType;
};

