1,221
社区成员
发帖
与我相关
我的任务
分享
//--------------------------------------------
//句柄安全描述
SECURITY_ATTRIBUTES sa = {0}; //句柄安全描述结构
sa.bInheritHandle = TRUE; //是否继承句柄
sa.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符
sa.nLength = sizeof(SECURITY_ATTRIBUTES); // sa结构的长度
//--------------------------------------------
//创建管道
HANDLE hWrite ; //指向句柄的写入指针
HANDLE hRead ; //指向句柄的读出指针
//执行创建管道
if(!CreatePipe (&hRead, &hWrite, &sa, 0)){
ShowMessage( "CreatePipe ERROR" ) ;
}
//--------------------------------------------
//创造命令行窗口
STARTUPINFO si = {0}; //新进程的主窗口特性结构
GetStartupInfo(&si); //该函数取得进程在启动时被指定的 STARTUPINFO 结构
si.hStdError = GetStdHandle((STD_OUTPUT_HANDLE)); //使用默认输出STD管道
si.hStdOutput = GetStdHandle((STD_OUTPUT_HANDLE)); //使用默认输出STD管道
si.hStdInput = hRead ; //重定向输入管道
si.wShowWindow = SW_SHOW; //显示窗口
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW ; //创造窗口方式
PROCESS_INFORMATION pi = {0}; //创建进程时相关的数据结构之一,该结构返回有关新进程及其主线程的信息
//创造进程
if(!CreateProcess( NULL, "cmd" ,NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi) ){
ShowMessage( "CreateProcess ERROR" ) ;
}
DWORD dwWrite = 0; //字符写入
WriteFile( hWrite, "测试写入文字", 10, &dwWrite, NULL ) ;
AllocConsole();//分配一个新的控制台资源
HANDLE hOutputHandle=GetStdHandle(STD_OUTPUT_HANDLE);//获得控制台输出句柄
DWORD nRet=0;
WriteConsole(hOutputHandle,L"Debug String....",lstrlenW(L"Debug String...."),&nRet,NULL);
FreeConsole(); //释放控制台资源