我用WaitForSingleObject的方式等待Word结束,但Word在关闭时死掉,why?(等待高手...)(100分)

  • 主题发起人 主题发起人 dadabox
  • 开始时间 开始时间
D

dadabox

Unregistered / Unconfirmed
GUEST, unregistred user!
代码:
procedure TForm1.Button1Click(Sender: TObject);
var
info:ShellExecuteInfo;
Attr:Integer;
FTitleName,FFileName:string;
WaitResult : word;
begin
FTitleName := '模板使用情况反馈表';
FFileName := 'E:/模板使用情况反馈表.doc';
Fsb.Text := '正由系统打开文件 '+FTitleName+' ...';
FillChar(Info, SizeOf(Info), 0);
info.cbSize := SizeOf(ShellExecuteInfo);
info.Wnd := Handle;
info.lpVerb := 'open';
info.lpFile := PChar(FFileName);
info.nShow := SW_SHOWNORMAL;
info.fMask := SEE_MASK_NOCLOSEPROCESS;
ShellExecuteEx(@info);
Fsb.Text := FTitleName + ' 打开完毕!';
WaitResult := WaitForSingleObject(info.hProcess,INFINITE);//在这个地方
Fsb.Text := FTitleName + ' 已关闭!';
end;

WORD能够正常启动编辑文档,当前当件也可以正常关闭,但在word关闭时就word就死掉了。
我的开发环境是D5+win2000,请各位帮忙。
 
兄弟!少了信号灯的创建来!呵呵
 
这个问题我以前遇到过,在写一个资源管理器的时候。
因为WaitForSingleObject中的参数INFINITE是无限等待的意思,所以你的WORD就挂在那儿
了,你可以将其设为1秒钟。就可以每隔一秒来判断是否关闭了。具体大致如下,因为我在
别的地方上网,没有装Delphi,可以记不太清楚了,你自己再查对一下,但八九不离十。
While WaitForSingleObject(info.hProcess,1000) = I_TIMEOUT do //好像是I_TIMEOUT,
Application.ProcessMessages;
你看一下帮助,可能不是I_TIMEOUT,但有个TIMEOUT在里面,一看便知。
 
zhangkan兄!I_TIMEOUT参数好像应该是singalobject吧??[?]
 
是WAIT_TIMEOUT!
不过,造上面的方法我程序的确没问题了。
while WaitForSingleObject(info.hProcess,1000) = WAIT_TIMEOUT do
Application.ProcessMessages;
谢谢!
同时也非常谢谢rockjie。
 
后退
顶部