对进程的小问题~~~~~~~~~

wq06100610 2004-04-16 01:28:56
(1)在使用CreateProcess的时候,其中有个参数是指向STARTUPINFO,在这个数据结构中,有一个结构是表示"进程与指定的桌面相关联",这句话是什么意思呢?难道进程的显示还和某个桌面有关系?不是只有一个桌面吗?给这个参数传递NULL的时候,表示默认的桌面~~默认的桌面是什么呢?(2)进程退出的时候,有一个进程退出代码,这个代码可以和子进程通信用~~但是,这个代码给操作系统,操作系统有什么用呢?比如一个进程的主线程int WINAPI _tWinMain(){}如果只是创建一个窗口,那么一般都是
{
return msg.wParam;
}这个返回给主线程有什么用呢?主线程退出时,这个代码要给进程作为退出代码,交给WINDOWS,这个代码对操作系统什么用呢?期待详解.上的少,分不多,见谅.
...全文
25 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
_foo 2004-04-16
  • 打赏
  • 举报
回复
itmaster:
为什么你老喜欢原封不动的转一些东东却不发表意见呢?奇怪.
_foo 2004-04-16
  • 打赏
  • 举报
回复
1.win2000以上确实是有多个桌面的.
例如最初用户登陆时那个是一个桌面,之后进入的那个是另一个桌面.

http://www.codeguru.com/Cpp/I-N/ieprogram/security/article.php/c4387

2.通常情况下系统是不会关心这个代码的.
但有时候你可以想在你的程序中执行另一个进程并等该进程结束后得到该进程的执行情况结果,这时你可以用GetExitCodeProcess来得到.(当然,前提是,另一个进程通常是你自己写的,并且你确切定义了各种退出代码的含义.)
itmaster 2004-04-16
  • 打赏
  • 举报
回复
STARTUPINFO 是一个重要的结构,它决定了子进程出现时主窗口的外观,它对于我们的目标也是至关重要的。通过这个结构就可以隐藏主窗口并且把管道句柄传递给子进程。

以下就是必须要填写的成员:

cb STARTUPINFO结构的大小
dwFlags 二进制标志位,它决定本结构的哪些成员有效,也决定主窗口是显示还是隐藏的状态。在我们的程序中使用STARTF_USESHOWWINDOW 和 STARTF_USESTDHANDLES的组合
hStdOutput 和hStdError 你想要子进程使用的标准输出和标准错误句柄,对我们来说,我们将把管道的写端作为子进程的标准输出和错误。因此当子进程往标准输出或标准错误发送信息时,它实际上把这些信息通过管道传给了父进程
wShowWindow 决定主窗口是显示还是隐藏。我们不希望显示子进程的主窗口,因此把该成员置成SW_HIDE
调用CreateProcess 来创建子进程,但调用成功后子进程仍然不处于激活状态。它被装进了内存但并没有立即运行。

在父进程中关闭管道的写端也是必须的。这是因为父进程并不使用管道的写句柄,而且如果一个管道有两个写入端也就不会工作,因此我们在从管道往外读数据之前必须关闭管道的写端。但是不能在调用CreateProcess 之前关闭,否则管道就坏了。你应当在CreateProcess 刚刚返回并且在读数据之前关闭管道的写端。

现在就可以通过函数ReadFile 在管道的读端读数据了。通过使用ReadFile ,可以使子进程处于运行状态。它将开始执行,并且当它往标准输出( 实际上是管道的写端 )上写数据时,数据就会被送至管道的读端。应当不停调用ReadFile 直至它的返回值为 0 ,也就是说再也没有数据可读了。对从管道读来的数据你可以进行任何处理,在我们的例子中它被显示在 Edit 控件中。

记得用完后关闭管道的读句柄。
wq06100610 2004-04-16
  • 打赏
  • 举报
回复
我再顶~~~~~~~~~~~~~~~
wq06100610 2004-04-16
  • 打赏
  • 举报
回复
顶一下

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧