我设计一个程序,思想是调用外部某个程序,比如Word(用ExecuteFile实现)
当调用后隐藏自身,在被调用的程序Word关闭后,再恢复自己试着用repeat语句实现不断查询handle,可是CPU占用率太高请问我该如何实现呢?
第一:如何让程序等待,就是暂停,直到word关闭时给程序一个信息,什么语句可以实现程序的不占用CPU的暂停;
第二:如何获知word关闭的消息,我对于Windows的Onclosequery事件不是很清楚,麻烦说详细一点。(最好是能获知特定窗口的关闭事件,不一定是Word)谢谢了,我是初学者。麻烦大虾们帮帮忙!
当调用后隐藏自身,在被调用的程序Word关闭后,再恢复自己试着用repeat语句实现不断查询handle,可是CPU占用率太高请问我该如何实现呢?
第一:如何让程序等待,就是暂停,直到word关闭时给程序一个信息,什么语句可以实现程序的不占用CPU的暂停;
第二:如何获知word关闭的消息,我对于Windows的Onclosequery事件不是很清楚,麻烦说详细一点。(最好是能获知特定窗口的关闭事件,不一定是Word)谢谢了,我是初学者。麻烦大虾们帮帮忙!
就是利用createObject和WaitForSingObject来实现进程的创建和等待结束
该进程结束的时候会自动发出一个类似中断的方式来实现但是这种方式有一种缺点,我必须通过注册表来获知Office的安装目录,并且获知Office是否安装。而且最关键的是,好像只能用CreateObject来创建一个可执行程序的进程,我正在试验打开指定文档能不能实现,比如指定的ABC.DOC,好像有点困难。下面贴出CreateObject和Wait的具体指令,绝对可行的,希望大家一起探讨。procedure TFormMain.BitBtnNewClick(Sender: TObject);
var
StartUpInfo: TStartUpInfo; // holds startup information
ProcessInfo: TProcessInformation; // holds process information
CurDir: string; // holds the current directorybegin
FormMain.Hide();
//*initialize the startup info structure*//
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
with StartupInfo do
begin
cb := SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := SW_SHOWNORMAL;
end; //启动程序的命令行,可带参数
CurDir := 'c:\windows\notepad.exe';
if CreateProcess(nil,PChar(CurDir), nil, nil, False,
NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo)=FALSE then
begin
MessageDlg('Failed to open !!!',mtError,[mbok],0);
FormMain.Show();
exit;
end; //等待进程结束
if WaitForSingleObject(ProcessInfo.hProcess,INFINITE)=WAIT_OBJECT_0 then
begin
FormMain.Show();
end else
begin
MessageDlg('Error!',mtError,[mbok],0);
FormMain.Show();
exit;
end;
end;上述语句在Delphi3+win2000中通过,不过我还是想了解如何在Delphi中捕获其他程序窗口关闭事件,以及知道是何程序关闭(不要运用不断查询Handle的方式,这样CPU占用率太高)各位大虾一起来帮帮忙吧!