📄 conredirect.h
字号:
//---------------------------------------------------------------------------
#ifndef ConRedirectH
#define ConRedirectH
//---------------------------------------------------------------------------
#include <vcl\SysUtils.hpp>
#include <vcl\Controls.hpp>
#include <vcl\Classes.hpp>
#include <vcl\Forms.hpp>
#define BUFFER_SIZE 16384 // Size of Buffer in StdOut and StdErr Thread
typedef void __fastcall (__closure *TStdReadEvent)(char *buffer, int len);
typedef void __fastcall (__closure *TChildExitEvent)(int exitcode);
//---------------------------------------------------------------------------
class TStdOutThread : public TThread
{
private:
TStdReadEvent FOnStdOut;
void __fastcall StdOutWrap (void);
char buffer[BUFFER_SIZE + 1];
DWORD length;
protected:
void __fastcall Execute();
public:
__fastcall TStdOutThread(bool CreateSuspended);
HANDLE StdOutRead;
__published:
__property TStdReadEvent OnStdOut = {read=FOnStdOut, write=FOnStdOut};
};
//---------------------------------------------------------------------------
class TStdErrThread : public TThread
{
private:
TStdReadEvent FOnStdErr;
void __fastcall StdErrWrap (void);
char buffer[BUFFER_SIZE + 1];
DWORD length;
protected:
void __fastcall Execute();
public:
__fastcall TStdErrThread(bool CreateSuspended);
HANDLE StdErrRead;
__published:
__property TStdReadEvent OnStdErr = {read=FOnStdErr, write=FOnStdErr};
};
//---------------------------------------------------------------------------
class TMonThread : public TThread
{
private:
TChildExitEvent FOnChildExit;
void __fastcall ChildExitWrap (void);
DWORD exitcode;
protected:
void __fastcall Execute();
public:
__fastcall TMonThread(bool CreateSuspended);
HANDLE ChildProcess;
__published:
__property TChildExitEvent OnChildExit = {read=FOnChildExit, write=FOnChildExit};
};
//---------------------------------------------------------------------------
class TConRedirect : public TComponent
{
private:
bool isWinNT, childrunning, temp;
HANDLE StdIn, StdOut, StdErr, StdInWrite, StdOutRead, StdErrRead;
HANDLE StdInWriteTmp, StdOutReadTmp, StdErrReadTmp;
HANDLE ChildProcess;
TStdOutThread *StdOutThread;
TStdErrThread *StdErrThread;
TMonThread *MonThread;
TStdReadEvent FOnStdOut;
TStdReadEvent FOnStdErr;
TChildExitEvent FOnChildExit;
void __fastcall ClosePipeHandles (void);
void __fastcall StdOutFunc (char *buffer, int len);
void __fastcall StdErrFunc (char *buffer, int len);
void __fastcall ChildExitFunc (int exitcode);
public:
__fastcall TConRedirect(TComponent* Owner);
__fastcall ~TConRedirect ();
bool __fastcall RunChild (char *appname, char *params, char *workpath);
void __fastcall Terminate (void);
void __fastcall SendChar (char ch);
void __fastcall SendString (AnsiString str);
bool __fastcall isChildRunning (void);
__published:
__property TStdReadEvent OnStdOut = {read=FOnStdOut, write=FOnStdOut};
__property TStdReadEvent OnStdErr = {read=FOnStdErr, write=FOnStdErr};
__property TChildExitEvent OnChildExit = {read=FOnChildExit, write=FOnChildExit};
};
//---------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -