(转)createProcess时不显示或者不创建窗口

http://blog.163.com/zhucongdzkd@126/blog/static/1399971932010780309154/

createProcess时不显示或者不创建窗口  

使用WIN32 API CreateProcess()以无窗口方式创建DOS程序
要达到DOS程序运行时不显示窗口的效果,有两种可能:
一是创建该DOS进程时,指定不创建窗口;
二是隐藏该DOS进程有窗口。
根据MSDN,CreateProcess() API的原型如下:
BOOL CreateProcess(
  LPCTSTR lpApplicationName,
  LPTSTR lpCommandLine,
  LPSECURITY_ATTRIBUTES lpProcessAttributes,
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  BOOL bInheritHandles,
  DWORD dwCreationFlags,
  LPVOID lpEnvironment,
  LPCTSTR lpCurrentDirectory,
  LPSTARTUPINFO lpStartupInfo,
  LPPROCESS_INFORMATION lpProcessInformation
);

其中,dwCreationFlags指定为CREATE_NO_WINDOW,即以不创建窗口方式创建DOS进程。
LPSTARTUPINFO lpStartupInfo参数又为STARTUPINFO结构,如下:
typedef struct _STARTUPINFO {
  DWORD cb;
  LPTSTR lpReserved;
  LPTSTR lpDesktop;
  LPTSTR lpTitle;
  DWORD dwX;
  DWORD dwY;
  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;

其中,指定STARTUPINFO结构中WORD wShowWindow为SW_HIDE,即以不显示窗口方式创建DOS进程。
在Visusl Studio 2005中实测的结果是:创建[CMD /C] DOS进程,第一种方式可以无窗口方式创建DOS进程,而第二种方式没有正确的隐藏DOS窗口。

posted @ 2012-12-25 16:06  崇山峻岭  阅读(1005)  评论(0编辑  收藏  举报