Windows API一日一练(87)CreateProcess函数

导读:
  人们需要处理的信息越来越复杂,往往在一个应用程序里是处理不完的,因此,就出现多个应用程序协同处理同一件事情。当然多个应用程序分开处理,也是比较容易开发,并且让应用程序复杂难度迅速降低。比如在开发一个银行的交易系统,有一个报表生成的主程序,然后还有很多小的,不同的报表生成程序。这样就需要从主程序里创建小报表程序进行运行。创建进程运行,需要使用函数CreateProcess来实现。
  
  函数CreateProcess声明如下:
  
  
  WINBASEAPI
  BOOL
  WINAPI
  CreateProcessA(
  __in_opt LPCSTR lpApplicationName,
  __inout_opt LPSTR lpCommandLine,
  __in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
  __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in BOOL bInheritHandles,
  __in DWORD dwCreationFlags,
  __in_opt LPVOID lpEnvironment,
  __in_opt LPCSTR lpCurrentDirectory,
  __in LPSTARTUPINFOA lpStartupInfo,
  __out LPPROCESS_INFORMATION lpProcessInformation
  );
  WINBASEAPI
  BOOL
  WINAPI
  CreateProcessW(
  __in_opt LPCWSTR lpApplicationName,
  __inout_opt LPWSTR lpCommandLine,
  __in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
  __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in BOOL bInheritHandles,
  __in DWORD dwCreationFlags,
  __in_opt LPVOID lpEnvironment,
  __in_opt LPCWSTR lpCurrentDirectory,
  __in LPSTARTUPINFOW lpStartupInfo,
  __out LPPROCESS_INFORMATION lpProcessInformation
  );
  #ifdef UNICODE
  #define CreateProcess CreateProcessW
  #else
  #define CreateProcess CreateProcessA
  #endif // !UNICODE
  
  lpApplicationName是应用程序的名称。
  lpCommandLine是命令行参数。
  lpProcessAttributes是进程的属性。
  lpThreadAttributes是线程的属性。
  bInheritHandles是否继承父进程的属性。
  dwCreationFlags是创建标志。
  lpEnvironment是环境变量。
  lpCurrentDirectory是当前目录。
  lpStartupInfo是传给新进程的信息。
  lpProcessInformation是进程返回的信息。
  
  调用函数的例子如下:
  #001 //创建进程。
  #002 //蔡军生 2007/12/11 QQ:9073204 深圳
  #003 void TestCreateProcess(void)
  #004 {
  #005 //清空结构。
  #006 STARTUPINFO sInfo;
  #007 PROCESS_INFORMATION pInfo;
  #008
  #009 ZeroMemory( &sInfo, sizeof(sInfo) );
  #010 sInfo.cb = sizeof(sInfo);
  #011 sInfo.dwFlags = STARTF_USESHOWWINDOW;
  #012 sInfo.wShowWindow = SW_SHOWNORMAL;
  #013
  #014 ZeroMemory( &pInfo, sizeof(pInfo) );
  #015
  #016 //创建一个进程。
  #017 if( !::CreateProcess( _T("WinCpp.exe"),
  #018 NULL,
  #019 NULL,
  #020 NULL,
  #021 FALSE,
  #022 0,
  #023 NULL,
  #024 NULL,
  #025 &sInfo,
  #026 &pInfo )
  #027 )
  #028 {
  #029 //输出出错信息。
  #030 const int nBufSize = 512;
  #031 TCHAR chBuf[nBufSize];
  #032 ZeroMemory(chBuf,nBufSize);
  #033
  #034 wsprintf(chBuf,_T("CreateProcess failed (%d)./n"), GetLastError() );
  #035 OutputDebugString(chBuf);
  #036 return;
  #037 }
  #038
  #039
  #040 //等进程关闭。
  #041 WaitForSingleObject( pInfo.hProcess, INFINITE );
  #042
  #043 //关闭进程和线程的句柄。
  #044 CloseHandle( pInfo.hProcess );
  #045 CloseHandle( pInfo.hThread );
  #046
  #047 }
  
  
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1930256

本文转自
http://blog.csdn.net/caimouse/archive/2007/12/11/1930256.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值