Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

Статус завершения работы с документом   Найти похожие ветки 

 
Gilk ©   (2003-11-05 15:35) [0]

Хочу получить статус завершения работы с документом после запуска командами ShellExecuteEx или CreateProcess.
1. WaitforSingleObject не отлавливается при уже открытом Word
2. При запуске с помощью ShellExecuteEx (когда Word еще не открыт до запуска) Word не закрывается


 
clickmaker ©   (2003-11-05 15:52) [1]

что значит "статус завершения работы с документом"? Статус завершения процесса? Тогда GetProcessExitCode


 
Gilk ©   (2003-11-05 15:58) [2]

Запускаю документ с помощью процедуры.
Возникают проблемы указанные в топике выше.
procedure TBlobFields.RunFileAndWait(Path:string);
var
SI:TShellExecuteInfo;
begin
ZeroMemory(@SI, SizeOf(SI));
SI.cbSize := SizeOf(TShellExecuteInfo);
with SI do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
lpFile := PChar(Path);
Wnd := Application.Handle;
nShow := SW_SHOWNORMAL;
end;
IF ShellExecuteEx(@SI) then
WaitForSingleObject(SI.hProcess, INFINITE);

end;


 
clickmaker ©   (2003-11-05 17:10) [3]

А, вордешник небось 2000? Т.е. новый процесс не стартует на новый файл.
Я енту проблему так решил:

FindExecutable(PChar(FileName), PChar(ExtractFilePath(Application.ExeName)), AppName);
ZeroMemory(@pi, SizeOf(PROCESS_INFORMATION));
ZeroMemory(@si, SizeOf(STARTUPINFO));
si.cb := SizeOf(STARTUPINFO);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_SHOWNORMAL;

if (WordVersion > 8) then begin

Result := CreateProcess(nil, PChar(Format(""%s" /n", [AppName])), nil, nil, FALSE, CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS, nil, nil,
si, pi);
if Result then begin

WaitForInputIdle(pi.hProcess, INFINITE);

ddeMgr := TDdeMgr.Create(Application);
DDEClient := TDDEClientConv.Create(nil);
DDEClient.ConnectMode := ddeManual;
try
Reg := TRegistry.Create(KEY_READ);
try
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey(Ext, false);
Key := Reg.ReadString("");
Reg.CloseKey;
Key := Key + "\shell\Open\ddeexec";
Reg.OpenKey(Key, false);
Macro := Reg.ReadString("");
Reg.CloseKey;
Reg.OpenKey(Key + "\Application", false);
Service := Reg.ReadString("");
Reg.CloseKey;
Reg.OpenKey(Key + "\Topic", false);
Topic := Reg.ReadString("");
Reg.CloseKey;
finally
Reg.Free;
end;
DDEClient.ServiceApplication := Service;
DDEClient.SetLink(Service, Topic);
Result := DDEClient.OpenLink;
if Result then begin
Result := DDEClient.ExecuteMacro(PChar(StringReplace(Macro, "%1", FileName, [])), false);
DDEClient.CloseLink;
end;
finally
DDEClient.Free;
end;
end;
end else begin

Result := CreateProcess(nil, PChar(Format(""%s" "%s"", [AppName, FileName])), nil, nil, FALSE,
CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS, nil, nil,
si, pi);
end;
if Result then begin

WaitForSingleObject(pi.hProcess, INFINITE);
end;
if (pi.hProcess <> 0) then CloseHandle(pi.hProcess);
if (pi.hThread <> 0) then CloseHandle(pi.hThread);



Страницы: 1 вся ветка

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
3-25243
ss300
2003-12-10 16:24
2004.01.09
ZeosDB


7-25629
*FoX*
2003-10-26 17:56
2004.01.09
Интерфейс


4-25663
Davinchi
2003-11-05 16:25
2004.01.09
Кнопки управления окном (свернуть,развернуть,закрвть) у MDIChild


14-25554
Тимохов
2003-12-18 17:31
2004.01.09
Chess


7-25628
Ev1972
2003-10-27 10:58
2004.01.09
Как программно определить путь к папке